我想将Java 8方法引用声明为Spring bean。在Spring XML文件中执行此操作的最简单方法是什么?
例如,假设我有:
class Foo {
Foo(ToLongFunction<Bar> fn) { ... }
}
class Bar {
long getSize() { ... }
}
...我想创建一个Foo
,它将方法引用Bar::getSize
作为构造函数参数。
如何在Spring bean XML文件中声明Foo
实例?
答案 0 :(得分:1)
我在下面提出的解决方案可能不是最好的主意,但我发现这个问题很有意思,并决定试一试。这是我能想到的最好的。
我不知道在这一刻是否有办法直接执行此操作(除了定义某种工厂bean之外),但也可以使用动态语言支持来实现,例如使用Groovy。 / p>
以下示例使用最新版本的Spring(截至今日4.1.6)为我运行
假设像这样的bean
map
然后我可以定义一个XML配置,如:
public class Foo {
private Function<String, String> task;
@Autowired
public Foo(Function<String, String> task){
this.task = task;
}
public void print(String message) {
System.out.println(task.apply(message));
}
}
当然,lambda的语法取决于您选择的语言。我不知道Groovy是否有类似方法引用的东西,但任何方法引用都可以用lambda / closure表示,就像我上面所做的那样。