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

 更新时间:2026年05月13日 09:45:15   作者:tuokuac  
文章解释了`@Bean`注解的本质以及如何在Spring中使用它来管理Bean, `Bean`注解告诉Spring执行该方法并把返回值作为Bean进行容器管理, 春看到`@Bean`会自动调用方法获取返回值,将返回的对象放进容器中管理, 通过这种方式,其他类可以直接注入使用这些Bean.

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring中的声明式事务控制详解

    Spring中的声明式事务控制详解

    这篇文章主要介绍了Spring中的声明式事务控制详解,Spring的声明式事务顾名思义就是采用声明的方式来处理事务,这里所说的声明,就是指在配置文件中声明,用在Spring配置文件中声明式的事务处理来代替代码是的处理事务,需要的朋友可以参考下
    2024-01-01
  • Vue计算属性computed和监听属性watch的使用解读

    Vue计算属性computed和监听属性watch的使用解读

    本文介绍了Vue.js中的计算属性(computed)和监听属性(watch)的区别和使用场景,计算属性是基于依赖缓存的,只有在相关依赖发生改变时才会重新求值,适合用于简单的数据处理和计算,而监听属性则用于监听数据变化时执行异步或开销较大的操作,适合用于处理复杂的数据逻辑
    2025-12-12
  • 最新hadoop安装教程及hadoop的命令使用(亲测可用)

    最新hadoop安装教程及hadoop的命令使用(亲测可用)

    这篇文章主要介绍了最新hadoop安装教程(亲测可用),本文主要讲解了如何安装hadoop、使用hadoop的命令及遇到的问题解决,需要的朋友可以参考下
    2022-06-06
  • SpringBoot-JWT生成Token和拦截器的使用(访问受限资源)

    SpringBoot-JWT生成Token和拦截器的使用(访问受限资源)

    本文主要介绍了SpringBoot-JWT生成Token和拦截器的使用(访问受限资源),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Java学习之缓冲流的原理详解

    Java学习之缓冲流的原理详解

    为了提高其数据的读写效率,Java中又定义了四种缓冲流,分别是:字节缓冲输入流、字节缓冲输出流、字符缓冲输入流和字符缓冲输出流。本文主要来和大家聊聊这些缓冲流的原理,希望对大家有所帮助
    2023-01-01
  • 从入门到精通:Java List遍历修改的完全指南

    从入门到精通:Java List遍历修改的完全指南

    在Java中,我们经常需要遍历List集合并对其中的元素进行修改,这可以通过使用迭代器或for循环来实现,需要的朋友可以参考下
    2023-10-10
  • Java实现生成自定义时长的静音音频

    Java实现生成自定义时长的静音音频

    这篇文章主要介绍了如何通过Java实现一个音频工具类,可以实现生成一段自定义时长(精确到毫秒)的wav音频。感兴趣的小伙伴可以了解一下
    2022-01-01
  • spring状态机模式使用小结

    spring状态机模式使用小结

    说起Spring状态机,大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢?没错,Spring状态机就是状态模式的一种实现,在介绍Spring状态机之前,让我们来看看设计模式中的状态模式,需要的朋友可以参考下
    2024-04-04
  • Java中的Cursor使用详解

    Java中的Cursor使用详解

    本文介绍了Java中的Cursor接口及其在大数据集处理中的优势,包括逐行读取、分页处理、流控制、动态改变查询、并发控制和减少网络流量等,感兴趣的朋友一起看看吧
    2025-02-02
  • Elasticsearch索引结构与算法解析

    Elasticsearch索引结构与算法解析

    ​作为搜索引擎的一部分,ES自然具有速度快、结果准确、结果丰富等特点,那么ES是如何达到“搜索引擎”级别的查询效率呢?首先是索引,其次是压缩算法,接下来我们就一起了解下ES的索引结构和压缩算法
    2023-04-04

最新评论