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