@Enable模块装配

Spring @Enable模块装配

  1. 定义:具备相同领域功能组件集合,组合所形成一个独立的单元。【简化配置--一起配置】
  2. 举例:@EnableWebMvc【自动组装与webMvc相关的东西】、@EnableAutoConfiguration【激活自动装配】等
  3. 实现方式:注解方式、编程方式

@Enable注解模块举例

框架实现@Enable注解模块激活模块
Spring Framework@EnableWebMvcWebMvc模块
 @EnableTransactionManagement事务管理模块
 @EnablecachingCaching模块
 @EnableMBeanExportJMX模块
 @EnableAsync异步处理模块
 @EnableWebFluxWeb Flux模块
 @EnableAspectJAutoProxyAspectJ代理模块
Spring Boot@EnableAutoConfiguration自动装配模块
 @EnableManagementContextActuator管理模块
 @EnableConfigurationPropertis配置属性绑定模块
 @EnableOAuth2SsoOAuth2单点登录模块
Spring Cloud@EnableEurekaServerEureka服务器模块
 @EnableConfigServer配置服务器模块
 @EnableFeignClients

Feign客户端模块

 @EnableZuulProxy服务网关Zuul模块

 

@EnableCriecuitBreaker

服务熔断器模块

实现方式

基于注解驱动方式

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
// 注册注解驱动
@Import(DelegatingWebMvcConfiguration.class)
public @interface EnableWebMvc {
}

// 注解驱动
@Configuration(proxyBeanMethods = false)
public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {
...
}

基于接口编程方式

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
// 注册驱动
@Import({CachingConfigurationSelector.class})
public @interface EnableCaching {
    boolean proxyTargetClass() default false;

    AdviceMode mode() default AdviceMode.PROXY;

    int order() default 2147483647;
}

// 实现了一个ImportSelector接口
public class CachingConfigurationSelector extends AdviceModeImportSelector<EnableCaching> {
...
    /**
	 * Returns {@link ProxyCachingConfiguration} or {@code AspectJCachingConfiguration}
	 * for {@code PROXY} and {@code ASPECTJ} values of {@link EnableCaching#mode()},
	 * respectively. Potentially includes corresponding JCache configuration as well.
	 */
	@Override
	public String[] selectImports(AdviceMode adviceMode) {
        // 判断产生不同的注解类
		switch (adviceMode) {
			case PROXY:
				return getProxyImports();
			case ASPECTJ:
				return getAspectJImports();
			default:
				return null;
		}
	}
}

自定义方式

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
//HelloWorldImportSelector-> HelloWorldConfiguration->helloWorld
@Import(HelloWorldImportSelector.class)
public @interface EnableHelloWorld {
}


/**
 * HelloWorld {@link ImportSelector} 实现
 */
public class HelloWorldImportSelector implements ImportSelector{
    @Override
    public Predicate<String> getExclusionFilter() {
        return null;
    }

    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        // 用helloWorld导入--变成了bean
        return new String[]{HelloWorldConfiguration.class.getName()};
    }
}


@Configuration
public class HelloWorldConfiguration {

    @Bean
    public String helloWorld(){ // 方法名即Bean名称
        return "Hello, World 2018";
    }
}
/**
 * 2021-03-30 14:13:57.572  INFO 17620 --- [           main] c.S.d.b.EnableHelloWorldBootstrap        : Starting EnableHelloWorldBootstrap using Java 1.8.0_261 on MicroWin10-1647 with PID 17620 (C:\Users\Administrator\Desktop\workspace\技术栈\dive-in-spring-boot\target\classes started by Administrator in C:\Users\Administrator\Desktop\workspace\技术栈\dive-in-spring-boot)
 * 2021-03-30 14:13:57.574  INFO 17620 --- [           main] c.S.d.b.EnableHelloWorldBootstrap        : No active profile set, falling back to default profiles: default
 * 2021-03-30 14:13:57.814  INFO 17620 --- [           main] c.S.d.b.EnableHelloWorldBootstrap        : Started EnableHelloWorldBootstrap in 0.565 seconds (JVM running for 0.932)
 * helloWorld Bean : Hello, World 2018
 */

《慕课--小马哥Spring Boot2.0》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值