@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'}