目录
@Configuration典型使用场景
配合@ComponentScan
这段代码定义了一个 Spring 配置类,启用了组件扫描功能,让 Spring 自动注册 com.example 包及其所有子包下所有符合条件的类为 Bean。
@Configuration
@ComponentScan("com.example")
public class AppConfig {
}
组合多个配置类
这段代码的作用是声明一个 Spring 配置类 AppConfig,并通过 @Import 导入另一个配置类 DatabaseConfig,从而将多个配置类组合在一起,Spring 会加载 AppConfig 和 DatabaseConfig 中定义的所有 Bean 和配置,实现模块化配置管理。
@Configuration
@Import(DatabaseConfig.class)
public class AppConfig {
}
⚠️注意:
1、为了确保 DatabaseConfig 中的 @Bean 能被 Spring 正确识别和注册,它应该加上 @Configuration 注解。
2、即使 DatabaseConfig 有 @Configuration 注解,Spring 也不会自动加载它,除非它被@ComponentScan描到,或者被其他配置类通过 @Import 显式引入。
@Configuration+@Bean典型使用场景
场景 1:定义Bean
@Configuration
public class AppConfig {
@Bean ✅默认使用方法名
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean("engine") ✅指定名称
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
场景 2:构建有依赖关系的对象
@Bean
public UserService userService(UserRepository repository) {
return new UserService(repository);
}
场景 3:设置 Prototype 作用域
@Bean
@Scope("prototype")
public UserSession userSession() {
return new UserSession();
}
场景 4:结合条件注解
@Bean
@ConditionalOnProperty(name = "feature.enabled", havingValue = "true")
public FeatureService featureService() {
return new FeatureServiceImpl();
}
场景 5:自定义 Bean 生命周期方法
@Bean(initMethod = "init", destroyMethod = "cleanup")
public MyResource myResource() {
return new MyResource();
}
// 对应类
public class MyResource {
public void init() {
// 初始化逻辑
}
public void cleanup() {
// 销毁前清理逻辑
}
}