@Configuration注解详解

作用:用于标记一个类作为Spring的配置类,配置类可以包含@Bean注解的方法,用于定义和配置bean,作为全局配置。实例代码

@Configuration
public class MyConfiguration {
    @Bean
    public Mybean mybean(){
        return new Mybean*();
    }
}  

@Bean:用于标记一个方法作为Spring的bean工厂方法。当一个方法被@Bean注解标记时,Spring会将该方法的返回值作为一个bean,并将其添加到Spring容器中。

在启动时,Spring 会扫描带有 @Configuration 注解的类,并在 Spring 容器中注册通过 @Bean 注解定义的 Bean,这些 Bean 将被作为依赖注入到其他需要的类中

Configuration注解的代理机制

定义:@Configuration 的代理机制是 Spring 框架在解析配置类时,确保通过配置类中定义的 @Bean 方法,始终返回同一个单例 Bean 的关键机制。它解决了 Spring 容器中 Bean 的重复创建问题,并确保所有依赖的组件都使用相同的实例。这种机制被称为CGLIB 代理机制

工作流程:

  1. 扫描到 @Configuration:Spring 启动时会扫描所有标记了 @Configuration 的类。@Configuration注解默认@Configuration(proxyBeanMethods=true)。

  2. 代理类生成:Spring 使用 CGLIB 创建该类的一个代理类,该代理类继承自原始配置类,并对所有标记了 @Bean 的方法进行增强。

  3. Bean 实例缓存:当调用 @Bean 方法时,代理类会负责检查 Spring 容器中的 Bean 缓存。如果存在相应的实例,直接返回,否则调用原始的方法来创建实例。

  4. 确保单例:无论 @Bean 方法在其他地方被调用多少次,代理机制都会确保返回的始终是容器中的同一个实例。

Configuration与Component的区别:

  1. @Configuration 是用于定义配置类的,它可以包含多个 @Bean 方法;@Component 主要是标注某个类为 Spring 容器中的 Bean,但它不具备 @Configuration 类的配置能力。

  2. @Component 注解虽然也会将类注册为 Bean,但是它不会创建 CGLIB 代理类。因此,如果在 @Component 类中使用 @Bean 方法,那么这些 @Bean 方法在调用时会返回不同的实例;@Configuration 则会通过代理机制,确保 @Bean 方法创建的是单例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值