天天看點

SpringBoot 常用注解

@SpringBootApplication 

這個配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三個配置。

@EnableAutoConfiguration

Spring Boot自動配置(auto-configuration),可以将@EnableAutoConfiguration或者@SpringBootApplication注解添加到一個@Configuration類上來選擇自動配置。

如果發現應用了你不想要的特定自動配置類,可以使用@EnableAutoConfiguration注解的排除屬性來禁用它們。

@Configuration

相當于傳統的xml配置檔案,如果有些第三方庫需要用到xml檔案,建議仍然通過@Configuration類作為項目的配置主類,可以使用@ImportResource注解加載xml配置檔案。

@ComponentScan

@ComponentScan 注解對應XML配置形式中的 <context:component-scan> 元素,表示啟用元件掃描,Spring 會自動掃描所有通過注解配置的 bean,然後将其注冊到 IOC 容器中。

可以通過 basePackages 等屬性來指定 @ComponentScan 自動掃描的範圍,如果不指定,預設從聲明 @ComponentScan 所在類的 package 進行掃描。

正因為如此,SpringBoot 的啟動類都預設在 src/main/java 下。

@ImportResource

用來加載xml配置檔案。

@Import 

第一類:直接導入配置類

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Import({SchedulingConfiguration.class})
@Documented
public @interface EnableScheduling {
}      

直接導入配置類SchedulingConfiguration,這個類注解了@Configuration,且注冊了一個scheduledAnnotationProcessor的Bean

第二類:依據條件選擇配置類

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(AsyncConfigurationSelector.class)
public @interface EnableAsync {
    Class<? extends Annotation> annotation() default Annotation.class;
    boolean proxyTargetClass() default false;
    AdviceMode mode() default AdviceMode.PROXY;
    int order() default Ordered.LOWEST_PRECEDENCE;

}      

AsyncConfigurationSelector通過條件來選擇需要導入的配置類,

AsyncConfigurationSelector的根接口為ImportSelector,這個接口需要重寫selectImports方法,在此方法内進行事先條件判斷。

若adviceMode為PORXY,則傳回ProxyAsyncConfiguration這個配置類。

若activeMode為ASPECTJ,則傳回AspectJAsyncConfiguration配置類。

第三類:動态注冊Bean

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(AspectJAutoProxyRegistrar.class)
public @interface EnableAspectJAutoProxy {
    boolean proxyTargetClass() default false;
}      

AspectJAutoProxyRegistrar 實作了ImportBeanDefinitionRegistrar接口,ImportBeanDefinitionRegistrar的作用是在運作時自動添加Bean到已有的配置類,通過重寫方法:

@Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry)      

其中,AnnotationMetadata參數用來獲得目前配置類上的注解;

BeanDefinittionRegistry參數用來注冊Bean。

@EnableAspectJAutoProxy

@EnableAspectJAutoProxy注解 激活Aspect自動代理

<aop:aspectj-autoproxy/>

開啟對AspectJ自動代理的支援。

@EnableAsync

@EnableAsync注解開啟異步方法的支援。

@EnableScheduling

@EnableScheduling注解開啟計劃任務的支援。

@EnableWebMVC

@EnableWebMVC注解用來開啟Web MVC的配置支援。

@EnableConfigurationProperties

@EnableConfigurationProperties 注解表示對 @ConfigurationProperties 的内嵌支援。

預設會将對應 Properties Class 作為 bean 注入的 IOC 容器中,即在相應的 Properties 類上不用加 @Component 注解。

@EnableJpaRepositories

@EnableJpaRepositories注解開啟對Spring Data JPA Repostory的支援。

Spring Data JPA 架構,主要針對的就是 Spring 唯一沒有簡化到的業務邏輯代碼,至此,開發者連僅剩的實作持久層業務邏輯的工作都省了,唯一要做的,就隻是聲明持久層的接口,其他都交給 Spring Data JPA 來幫你完成。

@EnableTransactionManagement

@EnableTransactionManagement注解開啟注解式事務的支援。

注解@EnableTransactionManagement通知Spring,@Transactional注解的類被事務的切面包圍。這樣@Transactional就可以使用了。

@EnableCaching

@EnableCaching注解開啟注解式的緩存支援

@Conditional

@Conditional 注解表示在滿足某種條件後才初始化一個 bean 或者啟用某些配置。

它一般用在由 @Component、@Service、@Configuration 等注解辨別的類上面,或者由 @Bean 标記的方法上。

如果一個 @Configuration 類标記了 @Conditional,則該類中所有辨別了 @Bean 的方法和 @Import 注解導入的相關類将遵從這些條件。

在 Spring 裡可以很友善的編寫你自己的條件類,所要做的就是實作 Condition 接口,并覆寫它的 matches()方法。

SpringBoot 常用注解