SpringBoot中,更多的是使用已经高度开发的一系列条件注解,第一次接触Spring的条件注解,没想到还需要写实现类。
1
2
3
4
5
6
7
8
9
|
@Conditional({
WindowCondition.class
})
@Bean
public XXX xxx(){
return new XXX();
}
|
Condition的实现类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
public class WindowCondition implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
/*
conditionContext:判断条件能使用的上下文(环境)
annotatedTypeMetadata:注释信息
*/
// 获取到ioc使用的beanFactory
ConfigurableListableBeanFactory beanFactory = conditionContext.getBeanFactory();
// 获取类加载器
ClassLoader classLoader = conditionContext.getClassLoader();
// 获取当前环境信息
Environment environment = conditionContext.getEnvironment();
// 获取到bean定义的注册类(我以为会通过这个类注入Bean,看样子是我想多了)
// 支持定义一个Bean
// 支持移除一个bean
BeanDefinitionRegistry registry = conditionContext.getRegistry();
return false;
}
}
|
我们也可以手动指定os.name:
-Dos.name=linux