enable作为模块驱动在Spring Farmework、Spring Boot、Spring Cloud使用,都是通过注解的形式以@enable作为前缀,一些常用注解如
框架 | 注解 | 模块 |
---|---|---|
Spring Framework | @EnableWebMvc | Web MVC模块 |
Spring Framework | @EnableTransactionmanagement | Web MVC模块 |
Spring Framework | @EnableCacheing | Cacheing模块 |
Spring Framework | @EnableMBeanExport | JMX模块 |
Spring Framework | @EnableWebFlux | Web Flux模块 |
Spring Framework | @EnableAspectJAutoProxy | AspectJ模块 |
Spring Boot | @EnableAutoConfiguration | 自动装配模块 |
Spring Boot | @EnableWebManagementContext | Actuator模块 |
Spring Boot | @EnableConfigurationProperties | 配置属性绑定模块 |
Spring Boot | @EnableOauth2Sso | OAuth2单独登录模块 |
Spring Cloud | @EnableEurekaServer | eureka服务模块 |
Spring Cloud | @EnableConfigServer | 配置服务器模块 |
Spring Cloud | @EnableFeignClients | Feign客户端模块 |
Spring Cloud | @EnableZuulProxy | 服务网关zuul模块 |
Spring Cloud | @EnableCircuitBreaker | 服务熔断模块 |
如何自定义enable开发?
基于ImportSelector实现注解驱动
自定义接入类型
Access为接入类型的接口,下文的RPC接入和REST接入基于这个实现,定义两个接口,一个为启动,一个停止,内部嵌套一个枚举用于标识是哪一种接入
public interface Access { /** * 初始化配置 */ void start(); /** * 销毁配置 */ void stop(); enum Type{ REST, RPC } }
定义RPC和REST的实现
REST实现,只是简单的打印方法
public class RestAccess implements Access{ @Override public void start() { System.out.println("rest接入配置"); } @Override public void stop() { System.out.println("rest接入销毁配置"); } }
RPC实现
public class RpcAccess implements Acc<span>本文来源gaodai#ma#com搞*代#码9网#</span>ess{ @Override public void start() { System.out.println("rpc接入配置"); } @Override public void stop() { System.out.println("rpc接入销毁配置"); } }
自定义注解EnableAccess
接入类型为RPC或者REST,AccessImportSelector在下一步骤实现
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @Import(AccessImportSelector.class) public @interface EnableAccess { /** * 接入类型 * @return */ Access.Type type(); }
实现ImportSelector