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

时间:2015-06-04 18:12:21

标签: java spring lambda java-8

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

例如,假设我有:

class Foo {
    Foo(ToLongFunction<Bar> fn) { ... }
}

class Bar {
    long getSize() { ... }
}

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

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

1 个答案:

答案 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表示,就像我上面所做的那样。