Spring Boot 注解介绍
Spring Boot利用自动配置特性使配置Spring更简单。本文我们介绍org.springframework.boot.autoconfigure 和 org.springframework.boot.autoconfigure.condition 包中的常用注解。
1.@SpringBootApplication
该注解用于标记Spring Boot应用的主类:
@SpringBootApplication
class VehicleFactoryApplication {
public static void main(String[] args) {
SpringApplication.run(VehicleFactoryApplication.class, args);
}
}
@SpringBootApplication 封装了 @Configuration, @EnableAutoConfiguration, 和 @ComponentScan 注解,使用它们缺省属性值。
2.@EnableAutoConfiguration
@EnableAutoConfiguration注解,就如字面意思一样,启动Spring Boot查找类路径下自动配置Bean并自动应用。注意我们必须要使用@Configuration.
@Configuration
@EnableAutoConfiguration
class VehicleFactoryConfig {}
3.条件自动配置
通常写自定义自动配置,希望Spring条件化使用。我们可以利用本节介绍的注解实现。这些注解可以应用在 @Configuration 类或 @Bean 方法.
3.1 @ConditionalOnClass 和 @ConditionalOnMissingClass
使用这些条件,Spring仅仅使用该标记自动配置bean,当注解对应参数类存在或不存在。
@Configuration
@ConditionalOnClass(DataSource.class)
class MySQLAutoconfiguration {
//...
}
3.2 @ConditionalOnBean 和 @ConditionalOnMissingBean
我们使用这些注解,基于特定Bean存在或不存在的条件:
@Bean
@ConditionalOnBean(name = "dataSource")
LocalContainerEntityManagerFactoryBean entityManagerFactory() {
// ...
}
3.3 @ConditionalOnProperty
使用该注解,可以基于属性值进行条件配置:
@Bean
@ConditionalOnProperty(
name = "usemysql",
havingValue = "local"
)
DataSource dataSource() {
// ...
}
3.4 @ConditionalOnResource
基于特定资源是否存在进行条件配置:
@ConditionalOnResource(resources = "classpath:mysql.properties")
Properties additionalProperties() {
// ...
}
3.5 @ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication
基于当前应用是否为web应用条件进行配置:
@ConditionalOnWebApplication
HealthCheckController healthCheckController() {
// ...
}
3.6 @ConditionalOnExpression
该注解可以应用于更复杂的场景。基于SpEl表达式的值是否为True条件进行配置:
@Bean
@ConditionalOnExpression("${usemysql} && ${mysqlserver == 'local'}")
DataSource dataSource() {
// ...
}
3.7 @Conditional
针对更复杂条件,可以在类中自定义条件。然后在@Conditional注解中指定自定义条件类:
@Conditional(HibernateCondition.class)
Properties additionalProperties() {
//...
}
总结
本文我们概要介绍了如何细粒度自动配置过程,以及提供条件化方式实现自定义自动配置Bean。