如何在SpringXML文件中声明Java8方法引用?

如何在SpringXML文件中声明Java8方法引用?,java,spring,lambda,java-8,Java,Spring,Lambda,Java 8,我想将Java8方法引用声明为Springbean。在SpringXML文件中执行此操作的最简单方法是什么 例如,假设我有: class Foo { Foo(ToLongFunction<Bar> fn) { ... } } class Bar { long getSize() { ... } } class-Foo{ Foo(tolong函数fn){…} } 分类栏{ 长getSize(){…} } 。。。我想创建一个Foo,它将方法引用Bar::getSiz

我想将Java8方法引用声明为Springbean。在SpringXML文件中执行此操作的最简单方法是什么

例如,假设我有:

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

class Bar {
    long getSize() { ... }
}
class-Foo{
Foo(tolong函数fn){…}
}
分类栏{
长getSize(){…}
}
。。。我想创建一个
Foo
,它将方法引用
Bar::getSize
作为构造函数参数


如何在SpringbeanXML文件中声明
Foo
实例?

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

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

下面的示例使用最新版本的Spring运行(从今天的4.1.6开始)

如果是这样的豆子

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));    
    }

}
公共类Foo{
私人职能任务;
@自动连线
公共事务主任(职能任务){
this.task=任务;
}
公共作废打印(字符串消息){
System.out.println(task.apply(message));
}
}
然后我可以定义一个XML配置,如:

<lang:groovy id="func">
    <lang:inline-script>
        <![CDATA[
                import java.util.function.Function
                { text -> "Hello " + text } as Function
        ]]>
    </lang:inline-script>
</lang:groovy>

<bean id="foo" class="demo.services.Foo">
    <constructor-arg name="task" ref="func"/>
</bean>

“Hello”+text}作为函数
]]>

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

我想说,您没有。。。我强烈建议改为使用基于java的配置..基于java的配置现在不是一个选项。如果你在代码中没有得到答案,请调用一个spl方法。如果你使用的是java 8,那么你必须使用Spring 4。为什么基于Java的配置不可能?