自定义Spring Bean注入的Condition条件
在spring的源码中我们可以看到很多的条件注入,只有在满足某些条件时才能注入当前的bean,接下来我们自己实现一个自己的Condition条件
1. 案列场景
当在windows操作系统时注入某个Bean
2.自定义Condition
public class WinCondition implements Condition {
/**
*
* @param conditionContext 上下文信息(环境信息)
* @param annotatedTypeMetadata 注解信息
* @return
*/
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
//获取操作系统环境变量
Environment environment = conditionContext.getEnvironment();
//获取操作系统名称
String osName = environment.getProperty("os.name");
//如果是windows则返回true
if (osName.contains("Windows")) {
return true;
}
return false;
}
}
3. 具体使用
如下Controller只有在操作系统时windows时才会被注入
@Conditional(WinCondition.class)
@Controller
public class MyController {
}
4.面试:BeanFactory和FactoryBean的区别
- BeanFactory:可以获取容器中实例化的Bean
- FactoryBean:可以向容器中注入Bean