标签:spel before admin hold conf data 顺序 iterator server
是SpringBoot启动类上的注解。 也是springboot 最核心的注解,它是由三个注解组成的 @Configuration , @EnableAutoConfiguration , @ComponentScan 三个注解组成。 所以SpringBoot 的统一注解就是SpringBootApplication。
允许SpringBoot 自动配置注解,开启这个注解后,Springboot就根据当前类路径下的包或者类来配置Springbean。
如:当前类路径下有mybatis的jar包。 MybatisAutoConfiguration 注解就能根据相关的参数来配置mybatis 的各个Springbean。
@EnableAutoConfiguration 实现的关键在于引入了 AutoConfigurationImportSelector, 其核心的逻辑为selectImports 的方法。
这个注解就是@Configuration注解的变体, 只是用来修饰Spring boot的配置,或者可利于Springboot后续的扩展。
@conditionalOnBean(A.class) 仅仅在当前上下文中存在A对象时,才会实例化一个Bean,也就是说只有当A.class 在Spring的ApplicationContext中存在时,这个当前的bean才能创建。
这个注解的意思是组合@Conditional 注解 和 @ConditiionalOnbean 注解相反, 仅仅在当前上下文不存在A对象,才会实例化一个bean。
组合@conditional注解,可以仅当某些类存在于classpath上时候才创建某个bean。
@Bean //当classpath中存在类HealthIndicator时,才创建HealthIndicator Bean对象 @ConditionalOnClass(HealthIndicator.class) public HealthIndicator rocketMQProducerHealthIndicator(Map<String, DefaultMQProducer> producers) { if (producers.size() == 1) { return new RocketMQProducerHealthIndicator(producers.values().iterator().next()); }
组合@Conditional注解,和 @ConditionalOnClass 注解相反,当classspath中没有指定的class才开启配置。
组合@Conditional注解,当前项目类型是web项目才会开启配置, 当项目由以下3中类型: ANY(任何web项目都匹配) , servlet (仅但基础的servlet项目才会匹配) REACTIVE(只有基于响应的web应用程序才匹配)。
组合@Conditional 注解 和 @ConditionalOnWebApplication 注解相反 当前项目类型不是web 项目才开启配置。
组合 @conditional 注解, 当指定的属性由指定的值时才开启配置,具体操作是通过其两个属性name 以及 havingValue 来实现的, 其中name用来从application.properties中读取某个属性值,如果属性值为空,则返回false ; 如果值不为空, 则将值于havingValue 指定的值进行比较,如果一样则返回true ; 否则返回false,如果返回值为false,则该configuration 不生效, 为true 则生效。
@Bean //匹配属性rocketmq.producer.enabled值是否为true @ConditionalOnProperty(value = "rocketmq.producer.enabled", havingValue = "true", matchIfMissing = true) public RocketMQProducer mqProducer() { return new RocketMQProducer(); }
组合@Conditional 注解, 当spEl 表达式为true是才开启配置。
@Configuration @ConditionalOnExpression("${enabled:false}") public class BigpipeConfiguration { @Bean public OrderMessageMonitor orderMessageMonitor(ConfigContext configContext) { return new OrderMessageMonitor(configContext); } }
组合@Conditional注解, 在运行Java jvm在指定的版本范围内开启配置。
组合@Conditional注解 , 当类路径下由指定的资源才会开启配置。
@Bean @ConditionalOnResource(resources="classpath:shiro.ini") protected Realm iniClasspathRealm(){ return new Realm(); }
组合Conditional注解, 当指定的 JNDI存在时才开启配置。
组合Conditional注解, 当指定的云平台激活时才开启配置。
组合Conditional注解 , 当指定的class在容器中只有一个bean, 或者同时由多个但为首选时才会开启配置。
spring boot 可以使用注解的方式将自定义的properties文件映射到实体bean中,
@Data @ConfigurationProperties("rocketmq.consumer") public class RocketMQConsumerProperties extends RocketMQProperties { private boolean enabled = true; private String consumerGroup; private MessageModel messageModel = MessageModel.CLUSTERING; private ConsumeFromWhere consumeFromWhere = ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET; private int consumeThreadMin = 20; private int consumeThreadMax = 64; private int consumeConcurrentlyMaxSpan = 2000; private int pullThresholdForQueue = 1000; private int pullInterval = 0; private int consumeMessageBatchMaxSize = 1; private int pullBatchSize = 32; }
当@EnableConfigurationProperties 注解一个用用到你的@Configuration时,任何被@ConfigurationProperties 注解beans 将自动被Environment 属性配置,这种风格的配置特别适合于SpringApplicationde 外部YAML配置经i选哪个配合使用。
@Configuration @EnableConfigurationProperties({ RocketMQProducerProperties.class, RocketMQConsumerProperties.class, }) @AutoConfigureOrder public class RocketMQAutoConfiguration { @Value("${spring.application.name}") private String applicationName; }
用在自动配置类上面,表示该自动类需要在另外指定自动配置类配置完之后,
如 Mybatis 的自动配置类,需要在数据源自动配置类之后。 @AutoConfigureAfter(DataSourceAutoConfiguration.class) public class MybatisAutoConfiguration { }
这个和@AutoConfigureAfter注解使用相反, 表示该自动类配置类需要在另外指定的自动配置类之前。
Spring boot 中由一个新的 注解 @AutoConfigureOrder, 用于确定配置加载的优先级顺序。
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) // 自动配置里面的最高优先级
@Configuration
@ConditionalOnWebApplication // 仅限于web应用
@Import(BeanPostProcessorsRegistrar.class) // 导入内置容器的设置
public class EmbeddedServletContainerAutoConfiguration {
@Configuration
@ConditionalOnClass({ Servlet.class, Tomcat.class })
@ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)
public static class EmbeddedTomcat {
// ...
}
@Configuration
@ConditionalOnClass({ Servlet.class, Server.class, Loader.class, WebAppContext.class })
@ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)
public static class EmbeddedJetty {
// ...
}
}
Spring 和 SpringMVC , SpringBoot 基础知识的认识
标签:spel before admin hold conf data 顺序 iterator server
原文地址:https://www.cnblogs.com/yishuo/p/12631214.html