Kkk*_*kev 8 java lambda spring java-8
我想将Java 8方法引用声明为Spring bean.在Spring XML文件中执行此操作的最简单方法是什么?
例如,假设我有:
class Foo {
Foo(ToLongFunction<Bar> fn) { ... }
}
class Bar {
long getSize() { ... }
}
Run Code Online (Sandbox Code Playgroud)
...我想创建一个Foo
将方法引用Bar::getSize
作为构造函数参数.
如何Foo
在Spring bean XML文件中声明实例?
我在下面提出的解决方案可能不是最好的主意,但我发现这个问题很有趣,并决定尝试一下。这是我能想到的最好的办法。
我不知道此时是否有办法直接执行此操作(除了定义某种工厂 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));
}
}
Run Code Online (Sandbox Code Playgroud)
然后我可以定义一个 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>
Run Code Online (Sandbox Code Playgroud)
当然,您的 lambda 语法将取决于您选择的语言。我不知道 Groovy 是否有类似方法引用的东西,但是任何方法引用都可以用 lambda/closure 来表达,就像我上面所做的那样。
归档时间: |
|
查看次数: |
1678 次 |
最近记录: |