@Bean注解为什么可以修饰方法?
@Bean
不是把一个class
实例化么?
为什么以下代码可以在方法前加@Bean
?
@Configuration
public class AppConfigWithActiveProfile {
@Bean
public Subject subject(){
Subject subject = new Subject();
subject.setLike("物理");
return subject;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
@Bean
的效果是:把返回值注册成一个bean,bean的名字是方法的名字如果在
@Configuration
的类里,默认会缓存第一次调用的返回值所谓为什么不能加
@Bean
你好。
我想你的疑惑点是,只有类才能实例化变成一个Bean,所以你认为能把一个类变成Bean的注解只能放在类上,比如常见的
@Service、@Configuration
注解,即跟类相关为啥不放在类的旁边。那么现在我们这样想一下:你能给什么类加@Service等注解呢?
显然,只有你自己写的类你才有编辑的权限。那么如果我要引入第三方jar包,也想其中的一个类注册为Bean呢?
显然,在类上加注解的方法是用不了的(当然你可以使用XML等方式来注册这个Bean,但我们既然已经选择了抛弃xml的方式选择注解,就不要再想着去为这种类额外添加xml配置了)。
所以,有了
@Bean
这个注解(同样还有@import
注解),它可以标记在方法上,只要这个方法的返回结果是这个类的实例即可。当程序启动时,就会扫描到这个注解,去执行这个方法注册一个bean放到容器中,这与放在类上或者xml中的bean配置的注册过程是几乎一样的,只要成功实例化使得容器中有这个Bean了就万事大吉了。
现在回过头来,注解的名字或者放置的位置重要么?其实不重要,因为毋论你放到哪里,只要你的Spring程序能扫描到这个注解,并且能得到你需要实例化的类是谁,你准备怎么实例化就行。xml的配置方式与
@Service
注解的方式不也是一样的道理么。