@Configration详解

Spring框架中的@Configuration注解用于定义配置类,替代传统的XML配置,允许通过Java代码来配置Spring容器。以下是详细的解释:

1. 核心作用

  • 替代XML配置@Configuration标注的类相当于XML配置文件,其中包含Bean的定义和依赖配置。
  • 声明Bean:通过在配置类中使用@Bean注解的方法,可以注册Spring容器管理的Bean。

2. 基本用法

@Configuration
public class AppConfig {
    @Bean
    public DataSource dataSource() {
        return new DriverManagerDataSource();
    }
    
    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource); // 自动注入DataSource
    }
}
  • 加载配置类:使用AnnotationConfigApplicationContext加载配置类:

    ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
    JdbcTemplate jdbcTemplate = ctx.getBean(JdbcTemplate.class);
    

3. 依赖注入

  • 方法参数注入@Bean方法可以通过参数接收其他Bean(如dataSource注入到jdbcTemplate)。
  • 方法调用注入:在同一个配置类中调用其他@Bean方法时,Spring通过CGLIB代理确保返回单例实例,避免重复创建。

4. 配置类增强(CGLIB代理)

  • 单例保证@Configuration类被代理,使得多次调用@Bean方法返回同一实例。
  • 对比@Component:在普通@Component类中使用@Bean(称为“lite模式”),方法直接调用会创建新实例,需手动管理依赖。

5. 组合配置

  • @Import:引入其他配置类。

    @Configuration
    @Import({DatabaseConfig.class, SecurityConfig.class})
    public class AppConfig {}
    
  • @ComponentScan:自动扫描组件。

    @Configuration
    @ComponentScan("com.example")
    public class AppConfig {}
    

6. 环境与Profile

  • @Profile:根据环境激活配置。

    @Configuration
    @Profile("dev")
    public class DevConfig { /* 开发环境配置 */ }
    

7. 最佳实践

  • 单一职责:每个配置类专注于一个功能模块。
  • 结合注解:灵活使用@Profile@Conditional等实现条件化配置。

总结

@Configuration是Spring Java配置的核心,通过CGLIB代理确保Bean的单例和正确依赖注入,结合@Bean@Import等注解,提供灵活且强大的配置方式,替代传统XML,提升可维护性和类型安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值