当前位置: 代码网 > it编程>编程语言>Java > Spring最核心的注解@Bean本质用法及说明

Spring最核心的注解@Bean本质用法及说明

2026年05月13日 Java 我要评论
spring 最核心的注解@bean本质直接给你一句话戳穿本质,马上彻底懂答案:这个方法本身不是 bean,方法执行后返回的对象才是 bean!spring 会把这个返回的对象放进容器里管理!用最通俗

spring 最核心的注解@bean本质

直接给你一句话戳穿本质,马上彻底懂

答案:

这个方法本身不是 bean,方法执行后返回的对象才是 bean!

spring 会把这个返回的对象放进容器里管理!

用最通俗的话讲@bean原理

看这段代码:

@configuration // 配置类
public class mesaageconfig {

    // 加了 @bean 的方法
    @bean
    public messageconverter messageconverter() {
        // 1. 自己 new 对象
        jackson2jsonmessageconverter converter = new jackson2jsonmessageconverter();
        // 2. 自己配置对象
        converter.setcreatemessageids(true);
        // 3. 返回对象
        return converter; 
    }
}

spring 看到@bean会做什么?

spring 会自动调用这个方法,拿到返回值,然后:

  • 把返回的对象放进 spring 容器
  • 给这个 bean 起名 = 方法名 messageconverter
  • 以后别人想用,直接注入就行

总结:

@bean = 告诉 spring:执行我这个方法,把返回的对象给我当成 bean 管理!

  • 方法 = 造 bean 的工厂
  • 返回值 = 真正的 bean

问:它不是方法吗?怎么成 bean 了?

画个等号你就懂了:

@bean
public 消息 造消息的方法() {
    造一个消息...
    return 消息; // spring 拿走这个「消息」当 bean
}
  • 方法:只是生产 bean 的流水线
  • 返回的对象:才是商品(bean)
  • @bean:就是贴在流水线上的标签,告诉 spring 来拿货

这个 bean 怎么用?

其他类里直接注入就能用:

@service
public class messageservice {

    // 直接注入!spring 自动把上面方法返回的对象给你
    @autowired
    private messageconverter messageconverter;
}

@bean和 类注解(@service/@component)区别

方式注解适用场景
自己写的类@service @component类是你写的,直接加注解
别人写的类(jackson、rabbittemplate…)@bean类不是你写的,你需要new 出来 + 配置,交给 spring

你的场景:

jackson2jsonmessageconverter别人写的类,你需要:

  • new 出来
  • 配置 setcreatemessageids(true)
  • 交给 spring

→ 必须用 @bean

终极总结(背下来)

  • 加了 @bean 的方法 = spring 会自动调用
  • 方法的返回值 = 放进容器的 bean 对象
  • 方法名 = bean 的名字
  • 别人可以直接注入使用

最直白的一句:

你写的是方法,但 spring 要的是你方法 return 出来的那个对象!

再给你对应一下:

  • @configuration:造 bean 的工厂类
  • @bean:工厂里的加工方法
  • return xxx:加工好的产品 → bean

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com