Spring 中的 @Configuration 注解

 

@Configuration 是 Spring 框架中用于定义配置类的重要注解。它的主要作用是替代传统的 XML 配置文件,通过 Java 代码来定义和管理 Spring 容器中的 Bean。

基本用法

使用 @Configuration 注解标记一个类,表示该类是一个配置类。配置类中可以包含多个被 @Bean 注解的方法,这些方法会被 Spring 容器扫描并注册为 Bean。例如:

@Configuration
public class AppConfig {
   @Bean
   public UserRepository userRepository() {
       return new UserRepository();
   }
   @Bean
   public UserService userService() {
       return new UserService(userRepository());
   }
}

在上述代码中,AppConfig 是一个配置类,定义了两个 Bean:userRepository 和 userService

高级用法

组件扫描:可以结合 @ComponentScan 注解,自动扫描指定包中的组件。

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

导入其他配置类:通过 @Import 注解,可以将多个配置类组合在一起。

@Configuration
@Import(DatabaseConfig.class)
public class AppConfig {
}

@Configuration
public class DatabaseConfig {
  @Bean
  public DataSource dataSource() {
    return new DriverManagerDataSource();
  }
}

条件加载:使用 @Conditional 注解,可以根据条件决定是否加载某个配置类。

@Configuration
@Conditional(CustomCondition.class)
public class AppConfig {
}

实际应用场景

数据源配置:可以通过 @Configuration 配置数据源。

@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("root");
dataSource.setPassword("password");
return dataSource;
}
}

Web 安全配置:在 Spring Security 中,使用 @Configuration 配置安全规则。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/public/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").permitAll()
.and()
.logout().permitAll();
}
}

注意事项

  1. @Configuration 注解的类不能是 final 类型,也不能是匿名类。

  2. 嵌套的配置类必须是静态类。

  3. @Bean 默认作用域是单例,可以通过 @Scope("prototype") 修改为原型作用域。

总结

@Configuration 是 Spring 框架中用于定义配置类的核心注解,能够替代传统的 XML 配置文件。它支持组件扫描、条件加载、Bean 生命周期管理等功能,广泛应用于数据源配置、Web 安全配置等场景。通过 @Configuration,开发者可以以更直观和灵活的方式管理 Spring 容器中的 Bean。

posted @ 2025-11-16 15:30  涂山树下  阅读(11)  评论(0)    收藏  举报