javascript
Spring Boot注解
文章目錄
- 簡介
- @SpringBootApplication
- @EnableAutoConfiguration
- 條件自動配置
- @ConditionalOnClass 和 @ConditionalOnMissingClass
- @ConditionalOnProperty
- @ConditionalOnResource
- @ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication
- @ConditionalExpression
- @Conditional
Spring Boot注解
簡介
Spring Boot通過自動配置讓我們更加簡單的使用Spring。在本文中我們將會介紹org.springframework.boot.autoconfigure 和org.springframework.boot.autoconfigure.condition 里面經常會用到的一些注解。
@SpringBootApplication
首先我們看一下@SpringBootApplication:
@SpringBootApplication public class AnotationApp {public static void main(String[] args) {SpringApplication.run(AnotationApp.class, args);} }@SpringBootApplication被用在Spring Boot應用程序的Main class中,表示整個應用程序是Spring Boot。
@SpringBootApplication實際上是@Configuration, @EnableAutoConfiguration 和 @ComponentScan 的集合。
@EnableAutoConfiguration
@EnableAutoConfiguration 意味著開啟了自動配置。這意味著Spring Boot會去在classpath中查找自動配置的beans,并且自動應用他們。
注意, @EnableAutoConfiguration需要和@Configuration配合使用。
@Configuration @EnableAutoConfiguration public class VehicleFactoryConfig { }條件自動配置
有時候,我們在自定義自動配置的時候,希望根據某些條件來開啟自動配置,Spring Boot 提供了一些有用的注解。
這些注解可以和@Configuration 類 或者 @Bean 方法一起使用。
@ConditionalOnClass 和 @ConditionalOnMissingClass
這兩個注解的意思是,如果注解參數中的類存在或者不存在則Spring會去實例化自動配置的bean。
@Configuration @ConditionalOnClass(DataSource.class) public class MySQLAutoconfiguration { }@ConditionalOnBean 和 @ConditionalOnMissingBean
這兩個和上面的區別在于,這兩個是判斷是否有實例化的bean存在。
@Bean @ConditionalOnBean(name = "dataSource") LocalContainerEntityManagerFactoryBean entityManagerFactory() {// ... }@ConditionalOnProperty
使用這個注解我們可以判斷Property的某些屬性是不是需要的值:
@Bean @ConditionalOnProperty(name = "usemysql", havingValue = "local" ) DataSource dataSource() {// ... }@ConditionalOnResource
只有當某些resource存在的時候,才會起作用。
@ConditionalOnResource(resources = "classpath:mysql.properties") Properties additionalProperties() {// ... }@ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication
這兩個注解通過判斷是否web應用程序。
@Bean@ConditionalOnWebApplicationHealthCheckController healthCheckController() {// ...return null;}@ConditionalExpression
這個注解可以使用SpEL構造更加復雜的表達式:
@Bean @ConditionalOnExpression("${usemysql} && ${mysqlserver == 'local'}") DataSource dataSource() {// ... }@Conditional
還有一種更加復雜的應用叫@Conditional,它的參數是一個自定義的condition類。
@Bean@Conditional(HibernateCondition.class)Properties newAdditionalProperties() {//...return null;} public class HibernateCondition implements Condition {@Overridepublic boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {return false;} }這個類需要實現matches方法。
本文的例子可以參考:https://github.com/ddean2009/learn-springboot2/tree/master/spring-boot-annotations
更多精彩內容且看:
- 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
- Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
- Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
- java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程
更多教程請參考 flydean的博客
總結
以上是生活随笔為你收集整理的Spring Boot注解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring boot 使用maven和
- 下一篇: Scala的存在类型