Spring手动装配之Spring @Enable 模块装配
:
1、@Enable注解模块
框架实现 | @Enable注解 | 激活模块 |
---|---|---|
Spring Framework | @EnableWebMvc | Web MVC 模块 |
Spring Framework | @EnableTransactionManagement | 事务管理模块 |
Spring Framework | @EnableCaching | Caching 模块 |
Spring Framework | @EnableMBeanExport | JMX 模块 |
Spring Framework | @EnableAsync | 异步处理模块 |
Spring Framework | @EnableWebFlux | Web Flux 模块 |
Spring Framework | @EnableAspectJAutoProxy | AspectJ 代理模块 |
… | … | … |
Spring Boot | @EnableAutoConfiguration | 自动装配模块 |
Spring Boot | @EnableManagementContext | 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 | 服务熔断模块 |
2、实现方式
1)注解驱动
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented@Import(CachingConfigurationSelector.class)
public @interface EnableCaching {
// ...
}
2)接口编程
public class CachingConfigurationSelector extends AdviceModeImportSelector<EnableCaching> {
public String[] selectImports(AdviceModeadviceMode) {
switch (adviceMode) {
case PROXY:
return new String[] {
AutoProxyRegistrar.class.getName(),ProxyCachingConfiguration.class.getName()
};
case ASPECTJ:
return new String[] {
AnnotationConfigUtils.CACHE_ASPECT_CONFIGURATION_CLASS_NAME
};
default:
return null;
}
}