springBoot----@ConditionalOnxxx相关注解总结
下面来介绍如何使用@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应用)
后续会继续补充
另一种总结
@ConditionalOnMissingBean:该注解表示,如果存在它修饰的类的bean,则不需要再创建这个bean;可以给该注解传入参数例如@ConditionOnMissingBean(name = "example"),这个表示如果name为“example”的bean存在,这该注解修饰的代码块不执行。

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");
}
}
springBoot----@ConditionalOnxxx相关注解总结的更多相关文章
- spring boot @ConditionalOnxxx相关注解总结
Spring boot @ConditionalOnxxx相关注解总结 下面来介绍如何使用@Condition public class TestCondition implements Condit ...
- spring boot @ConditionalOnxxx相关注解
@Conditional(TestCondition.class) 这句代码可以标注在类上面,表示该类下面的所有@Bean都会启用配置,也可以标注在方法上面,只是对该方法启用配置. Spring框架还 ...
- 【spring boot】spring boot @ConditionalOnxxx相关注解总结
参考地址:https://blog.csdn.net/win7system/article/details/54377471 使用场景:在自动解析封装配置文件中的配置完成自动注入spring的时候 例 ...
- springBoot注解大全JPA注解springMVC相关注解全局异常处理
https://www.cnblogs.com/tanwei81/p/6814022.html 一.注解(annotations)列表 @SpringBootApplication:包含了@Compo ...
- SpringBoot之常用注解
在spring boot中,摒弃了spring以往项目中大量繁琐的配置,遵循约定大于配置的原则,通过自身默认配置,极大的降低了项目搭建的复杂度.同样在spring boot中,大量注解的使用,使得代码 ...
- SpringBoot(15)—@Conditional注解
SpringBoot(15)-@Conditional注解 作用 @Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件的才给容器注册Bean. 一.概述 1 ...
- SpringBoot+Spring常用注解总结
为什么要写这篇文章? 最近看到网上有一篇关于 SpringBoot 常用注解的文章被转载的比较多,我看了文章内容之后属实觉得质量有点低,并且有点会误导没有太多实际使用经验的人(这些人又占据了大多数). ...
- Spring bean依赖注入、bean的装配及相关注解
依赖注入 Spring主要提供以下两种方法用于依赖注入 基于属性Setter方法注入 基于构造方法注入 Setter方法注入 例子: public class Communication { priv ...
- springboot整合mybaits注解开发
springboot整合mybaits注解开发时,返回json或者map对象时,如果一个字段的value为空,需要更改springboot的配置文件 mybatis: configuration: c ...
- SpringBoot 中常用注解
本篇博文将介绍几种SpringBoot 中常用注解 其中,各注解的作用为: @PathVaribale 获取url中的数据 @RequestParam 获取请求参数的值 @GetMapping 组合注 ...
随机推荐
- CodeForces - 1087F:Rock-Paper-Scissors Champion(set&数状数组)
n players are going to play a rock-paper-scissors tournament. As you probably know, in a one-on-one ...
- 不要使用 Dispatcher.Invoke,因为它可能在你的延迟初始化 Lazy 中导致死锁
WPF 中为了 UI 的跨线程访问,提供了 Dispatcher 线程模型.其 Invoke 方法,无论在哪个线程调用,都可以让传入的方法回到 UI 线程. 然而,如果你在 Lazy 上下文中使用了 ...
- POJ 2441 Arrange the Bulls 状态压缩递推简单题 (状态压缩DP)
推荐网址,下面是别人的解题报告: http://www.cnblogs.com/chasetheexcellence/archive/2012/04/16/poj2441.html 里面有状态压缩论文 ...
- Mybatis中parameterType、resultMap、statementType等等配置详解(标签中基本配置详解)
一.(转自:https://blog.csdn.net/majinggogogo/article/details/72123185) 映射文件是以<mapper>作为根节点,在根节点中支持 ...
- 【HAOI2008】玩具命名
水题大失败 原题: 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自 ...
- LG2024 [NOI2001]食物链
拆点法 用并查集维护每种动物的同类.天敌.食物群 #include<cstdio> int fa[300005]; int n,k,ans; inline int read() { int ...
- dockercompose up build fail (node no such file or directory packages.json )
docker构建项目遇到如下问题: npm ERR! Darwin 15.0.0 npm ERR! argv "/usr/local/lib/node_modules/iojs-bin/no ...
- Reaction 开源可自定义实时的电商平台
Reaction 开源可自定义实时的电商平台,支持以下特性 拖放商品 订单处理 支付 物流 税 折扣 Analytics(分析) 与许多第三方应用程序集成 graphql 开发api 简单demo 使 ...
- sql server 循环操作
使用的sql 语句如下: declare @userid int ;set @userid=0while(@userid<20)begin print 'the result is :'+STR ...
- C语言面试题4
第二部分:程序代码评价或者找错 1.下面的代码输出是什么,为什么?void foo(void){ unsigned int a = 6; int b = -20; (a+b > ...