@Bean的疑问
使用@Bean注解的方法,我们一般是返回一个new对象,但是下面是定义了一个接口,然后在@Bean注解的方法内,直接return一个方法实现,就可以注入到容器里了,这个是什么原理呢?求教大神!谢谢!
package com.zetcode;
interface AppName {
String getName();
}
@Bean
public AppName getAppName(@Value("${app.name}") String appName) {
//这里直接用lambda表达式返回了。
return () -> appName;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个说的是Java8中lamda表达式的用法,也就是你有疑问的
() -> appName
getAppName 要求的是返回一个AppName对象,而这个AppName类是一个接口,没有具体的实现,且当中只有一个方法,所以在这里的lamda表达式定义了行内执行的方法类型接口。
具体的lamda教程可以看这个:Java Lambda 表达式 | 菜鸟教程
举个大家都应该看过的例子,新建线程的时候
是一个道理,都是免去了使用匿名方法的麻烦。
在你的问题里面,
getAppName
方法的传入参数appName
,被当作接口AppName
的具体实现返回出去 了