一、@ConditionalOnMissingBean
- 描述:该注解用于在指定的 Bean 不存在时条件化加载或注册相应的 Bean 或配置。
- 使用方法:
@Configuration
public class MyConfig {
@Bean
@ConditionalOnMissingBean(MyBean.class)
public MyBean myBean() {
}
}
- 属性:
value
:指定要检查的 Bean 类型。name
:指定要检查的 Bean 的名称。
- 常见场景:
提供默认的 Bean 实现,但允许用户自定义替代实现。
避免重复注册相同类型的 Bean。
二、@ConditionalOnClass
- 描述:该注解用于在指定的类存在于类路径中时条件化加载或注册相应的 Bean 或配置。
- 使用方法:
@Configuration
@ConditionalOnClass({ LibraryClass1.class, LibraryClass2.class })
public class MyConfig {
}
- 属性:
- 常见场景:
根据类的存在与否来进行条件化的配置。
为特定类的存在提供不同的实现或配置。
三、@ConditionalOnBean
- 描述:该注解用于在容器中存在指定的 Bean 时条件化加载或注册相应的 Bean 或配置。
- 使用方法:
@Configuration
@ConditionalOnBean(MyDependencyBean.class)
public class MyConfig {
}
- 属性:
value
:指定要检查的 Bean 类型。name
:指定要检查的 Bean 的名称。
- 常见场景:
根据已存在的 Bean 来进行条件化的配置。
只在特定的 Bean 存在时才进行特定的装配。
四、@DependsOn
- 描述:该注解通常用于确保 Bean 之间的创建顺序,特别是在有相互依赖关系的情况下,确保特定的 Bean 在其他 Bean 之前创建。
- 使用方法:
@Configuration
public class MyConfig {
@Bean
public BeanA beanA() {
}
@Bean
@DependsOn("beanA")
public BeanB beanB() {
}
}
- 属性:
value
:指定 Bean 的名称,表示当前 Bean 依赖于指定的 Bean。
- 常见场景:
确保某些 Bean 在其他 Bean 创建之前先创建。
控制 Bean 的创建顺序,解决 Bean 之间的依赖关系。
五、@ConditionalOnProperty
- 描述:该注解用于根据配置属性的值条件化加载或注册相应的 Bean 或配置。
- 使用方法:
@Configuration
@ConditionalOnProperty(name = "myapp.feature.enabled", havingValue = "true")
public class MyConfig {
}
- 属性:
name
:指定要检查的配置属性的名称。havingValue
:指定配置属性的值,当与此值匹配时满足条件。matchIfMissing
:指定当配置属性缺失时,默认是否满足条件。
- 常见场景:
基于配置属性的值来决定是否加载特定的 Bean 或配置。
允许用户通过配置文件控制特定功能的开启或关闭。
六、@ConditionalOnExpression
- 描述:该注解用于根据 SpEL 表达式的计算结果条件化加载或注册相应的 Bean 或配置。
- 使用方法:
@Configuration
@ConditionalOnExpression("#{systemProperties['myapp.environment'] == 'prod'}")
public class MyConfig {
}
- 属性:
value
:指定要求计算为 true 的 SpEL 表达式。
- 常见场景:
根据 SpEL 表达式的计算结果来决定是否加载特定的 Bean 或配置。
基于更复杂的条件逻辑进行条件化配置。
七、@ConditionalOnWebApplication
- 描述:该注解用于在 Web 应用程序环境下条件化加载或注册相应的 Bean 或配置。
- 使用方法:
@Configuration
@ConditionalOnWebApplication
public class MyConfig {
}
- 属性:
type
:指定 Web 应用程序的类型,可选值为 Type.SERVLET、Type.REACTIVE 或 Type.ANY。
- 常见场景:
根据应用程序运行环境是否为 Web 应用程序来进行条件化配置。
提供仅适用于 Web 环境的特定配置或 Bean。
八、@ConditionalOnResource
- 描述:该注解用于在类路径下存在指定的资源文件时条件化加载或注册相应的 Bean 或配置。
- 使用方法:
@Configuration
@ConditionalOnResource(resources = "classpath:myconfig.properties")
public class MyConfig {
}
- 属性:
- 常见场景:
根据类路径下是否存在指定的资源文件来进行条件化配置。
提供特定配置或 Bean,仅在所需的资源存在时才加载。