springboot @Conditional()根据条件加载组件Bean

@Conditional() 个人理解根据条件加载组件Bean

@Configuration
public class ConfigBean {

    @Conditional(UserConditional.class)
    @Bean
    public User user(){
        System.out.println("张三加载中...........");
        User user = new User();
        user.setUserName("张三");
        return user;
    }
    @Conditional(UserConditional2.class)
    @Bean
    public User user2(){
        System.out.println("李四加载中...........");
        User user = new User();
        user.setUserName("李四");
        return user;
    }

pojo 实体类就不写了

//这个类实现了 Condition 接口 在上面加载时根据这个类的返回值来判断是否向IOC容器注入这个组件Bean
public class UserConditional implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        Environment environment = conditionContext.getEnvironment();
        String property = environment.getProperty("os.name");
        System.out.println(property);
       // assert property != null;
        return property.contains("Windows");
    }
}

第二个组件加载

public class UserConditional2 implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        Environment environment = conditionContext.getEnvironment();
        String property = environment.getProperty("os.name");
        System.out.println(property);
        //assert property != null;
        return property.contains("Windows");//加载    两个
        //return !property.contains("Windows");  //不加载  一个
    }
}

测试

@SpringBootTest
class SpringbootRedisApplicationTests {
    @Autowired
    StringRedisTemplate redis;
    @Autowired
    private User user;
    @Autowired
    private User user2; //相同类型的Bean 根据名字加载 对应的组件
    @Autowired
//    private ApplicationContext applicationContext;

    @Test
    void contextLoads() {
        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
        String[] beanDefinitionNames = annotationConfigApplicationContext.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }
        System.out.println(this.user.toString());
        System.out.println(user2.toString());
    }

}

打印

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.5.RELEASE)

2020-11-19 12:17:14.364  INFO 4384 --- [           main] c.redis.SpringbootRedisApplicationTests  : Starting SpringbootRedisApplicationTests on DESKTOP-0PBOAF7 with PID 4384 (started by Administrator in C:\Users\Administrator\Desktop\springboot-redis)
2020-11-19 12:17:14.369  INFO 4384 --- [           main] c.redis.SpringbootRedisApplicationTests  : No active profile set, falling back to default profiles: default
Windows 10
Windows 10
2020-11-19 12:17:15.200  INFO 4384 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2020-11-19 12:17:15.203  INFO 4384 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2020-11-19 12:17:15.234  INFO 4384 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 16ms. Found 0 Redis repository interfaces.
张三加载中...........
李四加载中...........
2020-11-19 12:17:16.452  INFO 4384 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-11-19 12:17:17.540  INFO 4384 --- [           main] c.redis.SpringbootRedisApplicationTests  : Started SpringbootRedisApplicationTests in 3.801 seconds (JVM running for 5.552)
2020-11-19 12:17:17.560  INFO 4384 --- [           main] f.a.AutowiredAnnotationBeanPostProcessor : Autowired annotation should only be used on methods with parameters: void com.redis.SpringbootRedisApplicationTests.contextLoads()
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
user{userName='张三', userPwd='null', userSex='null', userAge=0, phoneNumber='null', address='null', createTime='null'}
user{userName='李四', userPwd='null', userSex='null', userAge=0, phoneNumber='null', address='null', createTime='null'}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值