spring boot starter--@Import注解,@Conditionxxx条件注解,@ConfigurationProperties和@EnableConfigurationProper

  • @Import注解:只能用在类上

  1. @Import( class数组 ) :把class数组里的类加入到spring容器中,这些在容器中bean名称是该类的全类名 ,比如com.zeng.xxx类名,如果是配置类,会导入配置类中的配置
  2. @Import( ImportSelector实现类 ):把ImportSelector接口方法selectImports()返回的全类名字符串数组,加入到spring容器中,这些在容器中bean名称是该类的全类名,springboot底层用的特别多
  3. @Import( ImportBeanDefinitionRegistrar实现类 ):手动注册bean到spring容器中
  • @Conditionxxx条件注解:在配置类中表示根据条件判断是否配置,放在带有spring注解的类上表示根据条件判断spring注解是否生效。在spring boot stater中使用很多,一般和maven的<scope>provided</scope>配合使用,来完成自动装配。比如,stater包限制某个类依赖不传递,然后可以通过判断当前classpath中否有那个类来决定是否配置,比如Mybatis自动配置源码:

@ConditionalOnExpression 表达式值决定是否执行

变量表达式的key取自属性配置文件
数值型和布尔型
@ConditionalOnExpression("${sig1.enabled}==1&&${sig2.enabled:true}")
字符串类型
@ConditionalOnExpression("'${sig3}'.equals('aaa')")

2 @ConditionOnProperty 属性值为true时则matches

@ConditionOnProperty(name = "sign4.enable")

3 自定义注解:实现Condition接口中的matches()方法,根据方法返回值决定是否执行

public class MyCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return true;
    }
}
@Component
@Conditional(MyCondition.class)
public class MyBean {
}

4 @ConditionalOnBean:仅仅在当前上下文中存在某个对象时,才会实例化一个Bean
5 @ConditionalOnClass:某个class位于类路径上,才会实例化一个Bean
6 @ConditionalOnExpression:当表达式为true的时候,才会实例化一个Bean
7 @ConditionalOnMissingBean:仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean
8 @ConditionalOnMissingClass:某个class类路径上不存在的时候,才会实例化一个Bean
9 @ConditionalOnNotWebApplication:不是web应用

  • @ConfigurationProperties和@EnableConfigurationProperties

1 @ConfigurationProperties把在 application.properties 或 application.yml 文件中的参数配置映射到实体类中

2 @EnableConfigurationProperties(@ConfigurationProperties标记的类):把@ConfigurationProperties标记的类加入到spring容器中,也可以使用注解@Component代替

Demo链接: https://pan.baidu.com/s/1MfGVXtj2xYYCxba-vRiqaQ

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值