​enable(SpringBoot中@Enablexxx注解详解)

2025-10-22 09:50 来源:生活常识网 点击:

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容器就实现了我们的目的。

实现@EnableLock注解

@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注解做了十分详细的总结。

使用@EnableLock功能

@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注解总结

@Enablexxx注解的本质就是结合@Import注解把已经实现的功能打开,一般用在框架代码中。如果您的公司内部需要实现一个通用的框架或者功能,你就可以在实现后通过@Enablexxx注解结合@Import注解导入这个框架或功能的配置类,然后在需要使用的地方添加上@Enablexxx注解就可以了,使用起来非常方便且实用。

希望文章对您有用,你们的点赞、关注是作者持续输出的动力源泉。