Spring Boot註解

Spring Boot註解java

簡介

Spring Boot經過自動配置讓咱們更加簡單的使用Spring。在本文中咱們將會介紹org.springframework.boot.autoconfigure 和org.springframework.boot.autoconfigure.condition 裏面常常會用到的一些註解。mysql

@SpringBootApplication

首先咱們看一下@SpringBootApplication:git

@SpringBootApplication
public class AnotationApp {
    public static void main(String[] args) {
        SpringApplication.run(AnotationApp.class, args);
    }
}

@SpringBootApplication被用在Spring Boot應用程序的Main class中,表示整個應用程序是Spring Boot。github

@SpringBootApplication其實是@Configuration, @EnableAutoConfiguration 和 @ComponentScan 的集合。web

@EnableAutoConfiguration

@EnableAutoConfiguration 意味着開啓了自動配置。這意味着Spring Boot會去在classpath中查找自動配置的beans,而且自動應用他們。spring

注意, @EnableAutoConfiguration須要和@Configuration配合使用。sql

@Configuration
@EnableAutoConfiguration
public class VehicleFactoryConfig {
}

條件自動配置

有時候,咱們在自定義自動配置的時候,但願根據某些條件來開啓自動配置,Spring Boot 提供了一些有用的註解。springboot

這些註解能夠和@Configuration 類 或者 @Bean 方法一塊兒使用。ide

@ConditionalOnClass 和 @ConditionalOnMissingClass

這兩個註解的意思是,若是註解參數中的類存在或者不存在則Spring會去實例化自動配置的bean。spring-boot

@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
    @ConditionalOnWebApplication
    HealthCheckController 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 {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return false;
    }
}

這個類須要實現matches方法。

本文的例子能夠參考:https://github.com/ddean2009/learn-springboot2/tree/master/spring-boot-annotations

更多教程請參考 flydean的博客

相關文章
相關標籤/搜索