@Bean注解为什么可以修饰方法?

发布于 2022-09-13 00:32:52 字数 319 浏览 21 评论 0

@Bean不是把一个class实例化么?

为什么以下代码可以在方法前加@Bean?

@Configuration
public class AppConfigWithActiveProfile {

    @Bean
    public Subject subject(){
        Subject subject = new Subject();
        subject.setLike("物理");
        return subject;
    }

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

路还长,别太狂 2022-09-20 00:32:52

@Bean的效果是:把返回值注册成一个bean,bean的名字是方法的名字
如果在 @Configuration 的类里,默认会缓存第一次调用的返回值
所谓为什么不能加@Bean

红颜悴 2022-09-20 00:32:52

你好。
我想你的疑惑点是,只有类才能实例化变成一个Bean,所以你认为能把一个类变成Bean的注解只能放在类上,比如常见的@Service、@Configuration注解,即跟类相关为啥不放在类的旁边。

那么现在我们这样想一下:你能给什么类加@Service等注解呢?
显然,只有你自己写的类你才有编辑的权限。那么如果我要引入第三方jar包,也想其中的一个类注册为Bean呢?
显然,在类上加注解的方法是用不了的(当然你可以使用XML等方式来注册这个Bean,但我们既然已经选择了抛弃xml的方式选择注解,就不要再想着去为这种类额外添加xml配置了)。

所以,有了@Bean这个注解(同样还有@import注解),它可以标记在方法上,只要这个方法的返回结果是这个类的实例即可。

当程序启动时,就会扫描到这个注解,去执行这个方法注册一个bean放到容器中,这与放在类上或者xml中的bean配置的注册过程是几乎一样的,只要成功实例化使得容器中有这个Bean了就万事大吉了。

现在回过头来,注解的名字或者放置的位置重要么?其实不重要,因为毋论你放到哪里,只要你的Spring程序能扫描到这个注解,并且能得到你需要实例化的类是谁,你准备怎么实例化就行。xml的配置方式与@Service注解的方式不也是一样的道理么。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文