如何在Spring XML文件中声明Java 8方法引用?

我想将Java 8方法引用声明为Spring bean。 在Spring XML文件中执行此操作的最简单方法是什么?

例如,假设我有:

class Foo { Foo(ToLongFunction fn) { ... } } class Bar { long getSize() { ... } } 

…我想创建一个Foo ,它将方法引用Bar::getSize作为构造函数参数。

如何在Spring bean XML文件中声明Foo实例?

我在下面提出的解决方案可能不是最好的主意,但我发现这个问题很有意思,并决定试一试。 这是我能想到的最好的。

我不知道在这一刻是否有办法直接这样做(除了定义某种工厂bean),但是你也可以使用动态语言支持,例如使用Groovy。

以下示例使用最新版本的Spring(截至今日4.1.6)为我运行

假设这样的bean

 public class Foo { private Function task; @Autowired public Foo(Function task){ this.task = task; } public void print(String message) { System.out.println(task.apply(message)); } } 

然后我可以定义一个XML配置,如:

    "Hello " + text } as Function ]]>      

当然,lambda的语法取决于您选择的语言。 我不知道Groovy是否有类似方法引用的东西,但任何方法引用都可以用lambda / closure来表达,就像我上面所做的那样。