當(dāng)前位置:首頁>生活>?enable(SpringBoot中@Enablexxx注解詳解)
發(fā)布時間:2025-11-25閱讀(1)
enable(SpringBoot中@Enablexxx注解詳解)
在使用springBoot集成其他三方框架的時候經(jīng)常能看到@Enablexxx相關(guān)的注解。
它的作用就是開啟某項功能,比如@EnableScheduling開啟調(diào)度任務(wù),
@EnableDiscoveryClient開始nacos注冊中心的服務(wù)注冊功能,這些@Enablexxx注解隨處可見。

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

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

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

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

@Enablexxx注解的本質(zhì)就是結(jié)合@Import注解把已經(jīng)實現(xiàn)的功能打開,一般用在框架代碼中。如果您的公司內(nèi)部需要實現(xiàn)一個通用的框架或者功能,你就可以在實現(xiàn)后通過@Enablexxx注解結(jié)合@Import注解導(dǎo)入這個框架或功能的配置類,然后在需要使用的地方添加上@Enablexxx注解就可以了,使用起來非常方便且實用。
希望文章對您有用,你們的點贊、關(guān)注是作者持續(xù)輸出的動力源泉。
歡迎分享轉(zhuǎn)載→http://www.avcorse.com/read-889871.html
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖