@Enable*是springboot中用來啟用某一個功能特性的一類註解。其中包括我們常用的@SpringBootApplication註解中用於開啟自動注入的Annotation@EnableAutoConfiguration,開啟異步方法的annotation@EnableAsync,開啟將配置文件中的屬性以bean的方式注入到IOC容器的annotation@EnableConfigurationProperties等。
隨便打開幾個@Enable*的源碼,比如@EnableSync,@EnableCircuitBreaker, @EnableCache
這些類中都有共同點使用了@Import註解
@Import 這個類的注釋是這麼說的:
Indicates one or more component classes to import — typically @Configuration classes.
@Import用來導入一個或多個類(bean被spring容器託管)、或者配置類(配置類裡面的Bean都會被spring容器託管)
在Spring4.2以後,@Import還支持導入普通的沒有@Configuration註解的類。
接下來就實現自定義的一個Enable
自定義註解類:
@Retention(RetentionPolicy.RUNTIME)@Import(Pack.class)public @interface EnablePack { int maxConnections() default 1000; }
Pack.java
public class Pack implements ImportAware, ApplicationContextAware { private ApplicationContext ctx ; private int maxConnections; @Override public void setImportMetadata(AnnotationMetadata annotationMetadata) { Map attributesMap = annotationMetadata.getAnnotationAttributes(EnablePack.class.getName()); AnnotationAttributes attrs = AnnotationAttributes.fromMap(attributesMap); this.maxConnections = attrs.getNumber("maxConnections"); System.out.println(ctx.getBean(ProductService.class)) ; System.out.println(this.maxConnections); } public void store(){ System.out.println(this.maxConnections); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.ctx = applicationContext ; } }
ImportAware 接口主要配合@Import註解使用開啟xxx功能。這裡也可以通過繼承AdviceModeImportSelector或者直接實現ImportSelector接口 來實現我們的功能。
啟動類:
@SpringBootApplication@EnableCaching@EnablePack(maxConnections = 10000)public class UserServiceApplication { public static void main(String[] args) { SpringApplication.run(UserServiceApplication.class, args); }}
啟動服務後,在控制臺可以看到輸出信息。
完畢!!!
給個關注,轉發唄,謝謝!!!
Restful API設計規範
Java代碼開發規範
SpringBoot多數據源配置詳解
SpringBoot+Atomikos多數據源分布式事務
Spring MVC 異步請求方式
Spring MVC 異常處理方式
SpringMVC參數統一驗證方法
zookeeper實現分布式緩存
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺「網易號」用戶上傳並發布,本平臺僅提供信息存儲服務。