springBoot----@ConditionalOnxxx相关注解总结
2024-10-18 02:04:28
下面来介绍如何使用@Condition
- public class TestCondition implements Condition
- {
- /**
- * 只有返回true,才会启用配置
- */
- public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata)
- {
- return true;
- }
- }
@Conditional(TestCondition.class)
这句代码可以标注在类上面,表示该类下面的所有@Bean都会启用配置,也可以标注在方法上面,只是对该方法启用配置。
spring框架还提供了很多@Condition给我们用,当然总结用语哪种好理解,看给位读者喽
@ConditionalOnBean(仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)
@ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)
@ConditionalOnExpression(当表达式为true的时候,才会实例化一个Bean)
@ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)
@ConditionalOnMissingClass(某个class类路径上不存在的时候,才会实例化一个Bean)
@ConditionalOnNotWebApplication(不是web应用)
后续会继续补充
另一种总结
@ConditionalOnClass:该注解的参数对应的类必须存在,否则不解析该注解修饰的配置类;
@ConditionalOnMissingBean:该注解表示,如果存在它修饰的类的bean,则不需要再创建这个bean;可以给该注解传入参数例如@ConditionOnMissingBean(name = "example"),这个表示如果name为“example”的bean存在,这该注解修饰的代码块不执行。
@ConditionalOnMissingBean:该注解表示,如果存在它修饰的类的bean,则不需要再创建这个bean;可以给该注解传入参数例如@ConditionOnMissingBean(name = "example"),这个表示如果name为“example”的bean存在,这该注解修饰的代码块不执行。
接上文
condition自定义声明
public class InitConditional implements Condition{ @Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
//判断是否已经包含了amazonTest Bean
Boolean bol = conditionContext.getBeanFactory().containsBean("amazonTest");
return bol;
}
}
使用自定义的Conditional
@Component
@Conditional(InitConditional.class)
public class AmazonTest { @Autowired
private AmazonProperties amazonProperties; public void testGet(){
System.out.println(" testGet Associated");
System.out.println(amazonProperties.getAssociateId());
}
}
WelcomeController 与 AmazonTest关联,使用ConditionOnBean(如果条件的bean存在,当前的bean才会被声明)
@Component
@ConditionalOnBean(AmazonTest.class)
public class WelcomeController {
private static final Logger logger = LoggerFactory.getLogger(WelcomeController.class); private AppProperties app;
private GlobalProperties global; @Autowired
public void setApp(AppProperties app) {
this.app = app;
} @Autowired
public void setGlobal(GlobalProperties global) {
this.global = global;
} public void testWelcome(){
String appProperties = app.toString();
String globalProperties = global.toString();
System.out.println(appProperties);
System.out.println(globalProperties);
}
}
main测试文件入口
public static void main(String[] args) {
ConfigurableApplicationContext configurableApplicationContext =SpringApplication.run(DemoApplication.class, args);
//bean自动注册,根据bean的名字获取Bean
AmazonProperties amazonProperties = (AmazonProperties) configurableApplicationContext.getBean("amazonProperties");
System.out.println(amazonProperties.getAssociateId()); Boolean aBooleanWelcomeController = configurableApplicationContext.containsBean("welcomeController");
if(!aBooleanWelcomeController){
System.out.println(" welcomeController init fail");
}else{
WelcomeController welcomeController = (WelcomeController) configurableApplicationContext.getBean("welcomeController");
System.out.println(" welcomeController init Success");
} Boolean aBooleanAmazonTest = configurableApplicationContext.containsBeanDefinition("amazonTest");
if(!aBooleanAmazonTest){
System.out.println(" amazonTest init fail");
}else{
AmazonTest amazonTest = (AmazonTest) configurableApplicationContext.getBean("amazonTest");
System.out.println(" amazonTest init Success");
}
}
最新文章
- JavaScript通过id获取不到元素是什么原因阿?
- QuanbenSoft Windows Runtime (Windows Store)Apps 应用及其框架总览
- arduino 入手
- iOS中UITableView数据源刷新了,但tableview当中的cell没有刷新
- (2)Spring集成Quartz定时任务框架介绍和Cron表达式详解
- SPRING IN ACTION 第4版笔记-第一章-003-AOP介绍
- Tomcat 80 端口被占,解决方案
- DataBase MongoDB高级知识-易扩展
- 【机器学习】--鲁棒性调优之L1正则,L2正则
- centos7下安装docker(dockerfile常用的指令)
- Day 1 上午
- H5测试点总结-UI测试、功能测试、兼容性测试、体验相关(弱网、资源、手机操作等)、安全性测试、性能测试
- 电脑修改密码后git上传失败Authentication failed
- 【UiPath 中文教程】02 - 创建自定义 Activity
- PHP-问题处理Fatal error: Uncaught Error: Call to undefined function mb_strlen()
- 缓存方案 通过SqlDependency实现Cache和Database的同步
- 前端框架之Vue(10)-全家桶简单使用实例
- UDP通讯协议实例
- 微软职位内部推荐-Senior Program Manager
- iOS8的一些控件的变更
热门文章
- java.lang.IndexOutOfBoundsException: setSpan (35 ... 35) ends beyond length 28
- Dlib与OpenCV图片转换
- 辞树的QAQ水题(字符串统计,思维)
- Linux内核电源管理综述
- 变量延迟(setlocal)之浅见
- java 中的 hashcode
- linux 知识点
- 百度,谷歌,360,搜狗,神马等蜘蛛IP段
- 未能正确加载“VSTS for Database Professionals Sql Server Data-tier Application”包。(转)
- JQuery获得内容 - text()、html() 以及 val()