spring使用@Condition——阅读开源项目中的代码

作用:为Bean添加自定义条件,只有当Bean满足条件的时候,才会被注册。

 

使用示例:

  1、实现Condition接口:org.springframework.context.annotation.Condition;

 1 import org.springframework.context.annotation.Condition;
 2 import org.springframework.context.annotation.ConditionContext;
 3 import org.springframework.core.type.AnnotatedTypeMetadata;
 4 
 5 public class WindowsCondition implements Condition {
 6     @Override
 7     public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
 8         return conditionContext.getEnvironment().getProperty("os.name").contains("Windows");
 9     }
10 }

  2、在主配置类中,使用@Conditional:表示在注册Bean时,加入判断条件

 1 import org.springframework.context.annotation.Bean;
 2 import org.springframework.context.annotation.Conditional;
 3 import org.springframework.context.annotation.Configuration;
 4 
 5 
 6 
 7 @Configuration
 8 public class MyConfig {
 9 
10     @Bean
11     @Conditional(WindowsCondition.class)
12     public ListService windowsListService(){
13         return new WindowsListService();
14     }
15 }

 

  3、使用:spring容器会自动根据条件加载Bean。

 1 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 2 
 3 public class Main {
 4     public static void main(String args[]){
 5         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
 6         ListService listService = context.getBean(ListService.class);
 7 
 8         System.out.println(listService.shoListCmd());
 9         context.close();
10 
11     }
12 }

 

 

原理:

参考博客:https://blog.csdn.net/wadeltf/article/details/87784660

 

posted @ 2020-05-23 20:21  怪兽不纯粹  阅读(266)  评论(0)    收藏  举报