五、Spring Boot注解
@SpringBootApplication
@SpringBootApplication注解是一个快捷的配置注解,在被它标注的类中,可以定义一个或多个Bean,并自动触发自动配置Bean和自动扫描组件。此注解相当于@Configuration、@EnableAutoConfiguration和@ComponentScan的组合。
在Spring Boot应用程序的主类中,就使用了此注解。示例代码如下:
@SpringBootApplication public class Application{ public static void main(String [] args){ SpringApplication.run(Application.class,args); } }
@EnableAutoConfiguration
@EnableAutoConfiguration注解用于通知Spring,根据当前类路径下引入的依赖包,自动配置与这些依赖包相关的配置项。
@ConditionalOnClass与@ConditionalOnMissingClass
这两个注解属于类条件注解,它们根据是否存在某个类作为判断依据来决定是否要执行某些配置。下面是一个简单的示例代码:
@Configuration @ConditionalOnClass(DataSource.class) class MySQLAutoConfiguration { //... }
@ConditionalOnBean与@ConditionalOnMissingBean
这两个注解属于对象条件注解,根据是否存在某个对象作为依据来决定是否要执行某些配置方法。示例代码如下:
@Bean @ConditionalOnBean(name="dataSource") LocalContainerEntityManagerFactoryBean entityManagerFactory(){ //... } @Bean @ConditionalOnMissingBean public MyBean myBean(){ //... }
@ConditionalOnProperty
@ConditionalOnProperty注解会根据Spring配置文件中的配置项是否满足配置要求,从而决定是否要执行被其标注的方法。示例代码如下:
@Bean @ConditionalOnProperty(name="alipay",havingValue="on") Alipay alipay(){ return new Alipay(); }
@ConditionalOnResource
此注解用于检测当某个配置文件存在使,则触发被其标注的方法,下面是使用此注解的代码示例:
@ConditionalOnResource(resources = "classpath:website.properties") Properties addWebsiteProperties(){ //... }
@ConditionalOnWebApplication与@ConditionalOnNotWebApplication
这两个注解用于判断当前的应用程序是否是Web应用程序。如果当前应用是Web应用程序,则使用Spring WebApplicationContext,并定义其会话的生命周期。下面是一个简单的示例:
@ConditionalOnWebApplication HealthCheckController healthCheckController(){ //... }
@ConditionalExpression
此注解可以让我们控制更细粒度的基于表达式的配置条件限制。当表达式满足某个条件或者表达式为真的时候,将会执行被此注解标注的方法。
@Bean @ConditionalException("${localstore} && ${local == 'true'}") LocalFileStore store(){ //... }
@Conditional
@Conditional注解可以控制更为复杂的配置条件。在Spring内置的条件控制注解不满足应用需求的时候,可以使用此注解定义自定义的控制条件,以达到自定义的要求。下面是使用该注解的简单示例:
@Conditioanl(CustomConditioanl.class) CustomProperties addCustomProperties(){ //... }
总结
本次课程总结了Spring Boot中常见的各类型注解的使用方式,让大家能够统一的对Spring Boot常用注解有一个全面的了解。另外,关注Java知音公众号,回复“后端面试”,送你一份面试题宝典!
由于篇幅的原因,关于Spring Boot不常用的一些注解,将在下一次分享中进行补充和说明。