Spring 最核心的注解@Bean本质

Spring 最核心的注解 @Bean 本质

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

答案:

这个方法本身不是 Bean,方法执行后返回的对象才是 Bean!
Spring 会把这个返回的对象放进容器里管理!


一、用最通俗的话讲 @Bean 原理

看这段代码:

java 复制代码
@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 会自动调用这个方法 ,拿到返回值,然后:

  1. 把返回的对象放进 Spring 容器
  2. 给这个 Bean 起名 = 方法名 messageConverter
  3. 以后别人想用,直接注入就行

总结:

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

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

二、问:它不是方法吗?怎么成 Bean 了?

画个等号你就懂了:

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

三、这个 Bean 怎么用?

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

java 复制代码
@Service
public class MessageService {

    // 直接注入!Spring 自动把上面方法返回的对象给你
    @Autowired
    private MessageConverter messageConverter;
}

四、@Bean 和 类注解(@Service/@Component)区别

方式 注解 适用场景
自己写的类 @Service @Component 类是你写的,直接加注解
别人写的类(Jackson、RabbitTemplate...) @Bean 类不是你写的,你需要new 出来 + 配置,交给 Spring

你的场景:

Jackson2JsonMessageConverter别人写的类,你需要:

  1. new 出来
  2. 配置 setCreateMessageIds(true)
  3. 交给 Spring

必须用 @Bean


五、终极总结(背下来)

  1. 加了 @Bean 的方法 = Spring 会自动调用
  2. 方法的返回值 = 放进容器的 Bean 对象
  3. 方法名 = Bean 的名字
  4. 别人可以直接注入使用

最直白的一句:

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


再给你对应一下:

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

需要我给你演示一下怎么在别的类里注入这个 MessageConverter Bean 吗?

相关推荐
jiankeljx2 小时前
Spring Boot 经典九设计模式全览
java·spring boot·设计模式
Lyyaoo.2 小时前
Spring中的拦截器
java·后端·spring
工程师老罗2 小时前
LVGL文本显示问题,编码问题
java·开发语言
紫丁香2 小时前
高并发面试题2
后端·高并发·面试题·场景
黑眼圈子2 小时前
牛客刷题记录5
java·开发语言·学习·算法
wuqingshun3141592 小时前
说说你对spring的IOC的理解
java·后端·spring
爱泡脚的鸡腿2 小时前
Nodejs快速上手D2--ExpressJS
后端
NGC_66112 小时前
ConcurrentHashMap介绍
java·开发语言
JY.yuyu2 小时前
Java Web上架流程(Nginx反向代理+负载均衡 ,Apache配置,Maven安装打包,Tomcat配置)
java·开发语言·前端