Condition接口
-
自定义条件
-
定义条件类:自定义类实现Condition接口,重写 matches 方法,在 matches 方法中进行逻辑判断,返回boolean值 。 matches 方法两个参数:
- context:上下文对象,可以获取属性值,获取类加载器,获取BeanFactory等
- metadata:元数据对象,用于获取注解属性。
-
判断条件: 在初始化Bean时,使用 @Conditional(条件类.class)注解
-
使用示例
-
自定义类,实现
Condition
接口,重写matches
方法public class MyCondition implements Condition { /** * @param conditionContext 上下文对象 * @param annotatedTypeMetadata 元数据对象 * @return 当返回值为true时,使用@Condition注解的方法会执行,false则不执行 */ @Override public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { return false; } }
-
在配置类中使用
@Conditional
注解,引用自定义实现Condition
接口的实现类做逻辑判断@Configuration public class UserConfig { /** * 当@Conditional验证通过时,将user对象注入到spirng容器 */ @Bean @Conditional(MyCondition.class) public User getUser() { return new User(); } }
-
从Spirng容器中获取User对象
/** * spring启动类 */ @SpringBootApplication public class SpringConditionTwoApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(SpringConditionTwoApplication.class, args); User bean = context.getBean(User.class); System.out.println(bean); } }
-
-
-
SpringBoot 提供的常用条件注解:
- ConditionalOnProperty:判断配置文件中是否有对应属性和值才初始化Bean
- ConditionalOnClass:判断环境中是否有对应字节码文件才初始化Bean
- ConditionalOnMissingBean : 判断spring容器中没有对应Bean才初始化Bean
- …
- 以上注解多用于配置类中,构建Bean存入spring容器而用。
切换Spring内置的服务器
-
排除Spirng Boot内嵌自带的tomcat服务器
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.3.1.RELEASE</version> <exclusions> <!-- 排除tomcat依赖--> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
-
引入新的服务器依赖(以jetty为例)
<!-- 引入jetty服务器依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> <version>2.3.1.RELEASE</version> </dependency>
自定义@Eable*注解
-
在依赖模块中创建配置类。
/** * @Configuration:表示此类是一个配置类,其实配置类就相当于工厂模式,必须要通过工厂,才能得到某个bean */ @Configuration public class UserConfig { @Bean //@ConditionalOnMissingBean:判断spring容器中没有对应Bean才初始化Bean @ConditionalOnMissingBean public User getUser() { return new User(); } }
-
在依赖模块中自定义注解(@Enable*)
/** * 自定义@EnableUser注解 */ @Target(ElementType.TYPE)