發布時間:2025-11-25閱讀(3)
enable(SpringBoot中@Enablexxx注解詳解)
在使用springBoot集成其他三方框架的時候經常能看到@Enablexxx相關的注解。
它的作用就是開啟某項功能,比如@EnableScheduling開啟調度任務,
@EnableDiscoveryClient開始nacos注冊中心的服務注冊功能,這些@Enablexxx注解隨處可見。

那他的實現原理是什么呢?
下面來實現一個自己的開關功能,比如@EnableLock,這是一個使能鎖的功能。
通過@EnableLock注解就能很清晰的理解@Enablexxx相關注解的實現原理。
@ConfigurationpublicclassLockConfiguration{ @BeanpublicLockServicelockService(){returnnewLockService(); } }publicclassLockService{publicvoidlock(){ System.out.println("locksomething"); }publicvoidunLock(){ System.out.println("unLocksomething"); } }
這里就是做一個簡單的演示,LockService類的作用就是加鎖和解鎖。
LockConfiguration就是一個配置類,把LockService對象注入Spring容器中。
這里相當于實現了鎖的功能,如果能夠把LockConfiguration配置類識別并導入Spring容器就實現了我們的目的。
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@Import(LockConfiguration.class) public@interfaceEnableLock{ }
這里稍作解釋下:
@Target(ElementType.TYPE)表示@EnableLock注解只能用在類上。
@Retention(RetentionPolicy.RUNTIME)表明注解作用在程序運行時。
@Documented就是一個文檔標識。
@Inherited表示注解可被繼承,比如一個類Person被@EnableLock標注了,那么Student類繼承Person,那么Student類相當于也被標注了@EnableLock注解。
@Import(LockConfiguration.class)導入鎖配置類,相當于LockConfiguration.class
配置類和LockConfiguration.class中注入的bean對象都可以導入到Spring容器中。
如果對@Import注解的作用不是很明確,可以看我的另一篇文章Spring中@Import注解詳解,里面對@Import注解做了十分詳細的總結。

@EnableLockpublicclassImportStudyApplication{publicstaticvoidmain(String[]args){ ApplicationContextac=newAnnotationConfigApplicationContext(ImportStudyApplication.class); LockServicelockService=(LockService)ac.getBean(LockService.class); lockService.lock(); lockService.unLock(); } }
在ImportStudyApplication類上標注了@EnableLock相當于打開了LockConfiguration配置,因此LockConfiguration配置類的注入的對象都能成功導入到Spring容器。
測試結果:

可以看到,LockService對象已經可以成功從容器中獲取并使用,所有@EnableLock注解生效了。
下面來看一個不加@EnableLock的效果

看到了吧,如果不加@EnableLock,LockService對象是獲取不到的。

@Enablexxx注解的本質就是結合@Import注解把已經實現的功能打開,一般用在框架代碼中。如果您的公司內部需要實現一個通用的框架或者功能,你就可以在實現后通過@Enablexxx注解結合@Import注解導入這個框架或功能的配置類,然后在需要使用的地方添加上@Enablexxx注解就可以了,使用起來非常方便且實用。
希望文章對您有用,你們的點贊、關注是作者持續輸出的動力源泉。
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖