IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring @Enable模块装配的注解及编程实现方式,及包括“注解方式”,“编程方式”的自定义模块装配方式 -> 正文阅读

[Java知识库]Spring @Enable模块装配的注解及编程实现方式,及包括“注解方式”,“编程方式”的自定义模块装配方式

前言

通过模式注解的方式加载单一Bean,那如果有相关联的一系列Bean需要加载,是不是意味着每个被关联的类都需要单独加载呢?并不是哦!对于相关联的多个类。我们可以使用Enable方式同时加载多个类。同时Enable方式相比模式注解方式更灵活。常见的Enable方式有@EnableWebMvc、@EnableAutoConfiguration等。

Spring Framework 3.1 开始支持”@Enable 模块驱动“。所谓“模块”是指具备相同领域的功能组件集合, 组合所形成一个独立 的单元。比如 Web MVC 模块、AspectJ代理模块、Caching(缓存)模块、JMX(Java 管 理扩展)模块、Async(异步处 理)模块等。
Spring @Enable 模块装配

定义:具备相同领域的功能组件集合,组合所形成的一个独立的单元。
举例:@EnableWebMvc(自动组装webMvc)、@EnableAutoConfiguration(激活Springboot自动装配)等
实现:注解方式、编程方式

Spring @Enable 模块概览

框架实现@Enable注解模块激活模块
Spring Framework@EnableWebMvcWeb MVC 模块
@EnableTransactionManagement事务管理模块
@EnableCachingCaching 模块
@EnableMBeanExportJMX 模块
@EnableAsync异步处理模块
@EnableWebFluxWeb Flux 模块
@EnableAspectJAutoProxyAspectJ 代理模块
Spring Boot@EnableAutoConfiguration自动装配
@EnableManagementContextActuator 管理模块
@EnableConfigurationProperties配置属性绑定模块
@EnableOAuth2SsoOAuth2?单点登录模块
Spring Cloud@EnableEurekaServerEureka 服务器模块
@EnableConfigServer配置服务器模块
@EnableFeignClientsFeign?客户端模块
@EnableZuulProxy服务网关Zuul?模块
@EnableCircuitBreaker服务熔断模块

模块装配实现方式

注解方式

DelegatingWebMvcConfiguration类上的@Configuration,即代表了该实现方式为注解驱动?。

编程方式

?CachingConfigurationSelector类继承了AdviceModeImportSelector,即代表了接口编程的方式。
在采用接口编程方式时,其实只要实现ImportSelector接口即可。其实AdviceModeImportSelector也实现了ImportSelector接口。

自定义模块装配方式

注解方式

自定义Enable注解??

?编程方式

自定义Enable注解

总结?

@Import(HelloWorldConfiguration.class)引入配置类,而不是这个selector,同样也可以实现。但是为什么要要一圈呢?主要是因为多一层这个selector,可以在select里做一下流程控制。

实现自动装配只需要在resource下新建META-INF文件夹,然后加入

# /是换行符,这里的类名一般都很长为了方便阅读换行标注,多个类用逗号分隔
org.springframework.boot.autoconfigure.EnableAutoConfiguration=/
com.HelloWorldAutoConfiguration,TestConfiguration ?

?spring.factories就像是工厂一样配置了大量的接口对应的实现类,我们通过这些配置 + 反射处理就可以拿到相应的实现类。这种类似于插件式的设计方式,只要引入对应的jar包,那么对应的spring.factories就会被扫描到,对应的实现类也就会被实例化,如果不需要的时候,直接把jar包移除即可。

如在springboot的各个依赖包下,我们经常看到META-INF/spring.factories这个文件。spring.factories文件的内容基本上都是这样的格式:

# Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener

我们看到,这个文件配置了一个key:value格式的数据
1)key是:

org.springframework.context.ApplicationContextInitializer

2)value是:

org.springframework.context.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,org.springframework.context.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener

key声明的是一个接口,value则是这个接口对应的实现类,如果有多个则以","符号分割。
简单来说,spring.factories文件包含了一些接口,及相对应的实现类的配置,我们通过这些配置就可以知道接口,有哪些可选的实现类,并通过反射获取对应的实例对象。

就像是简单工厂模式一样,也因此spring将这个文件定义为spring.factories这个名字。

  • Spring @Enable模块装配,在当前测试项目配置类中,通过@Enable*注解,引入需要的模块。
  • Spring @Enable模块装配中,都会将各模块中的配置类,通过@Import导入到当前项目配置类中。
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 11:30:08  更:2021-07-29 11:31:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 16:01:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码