Spring 框架各模块的特性及使用的编程模型
Spring各模块及特性
以下内容使用版本为 Spring Framework 5.2.13 RELEASE,模块名称都为简写,如 aop 等同于 spring-aop模块
-
aop,面向接口或者切面编程
aopalliance,AOP的核心advice标识和抽象反射拦截。
aop,AOP的核心
-
aspects,spring对aspects的支持
包含 beans、cache、context annotation、scheduling、transacation
-
beans和contexts(涉及三个模块 context、context-indexer、context-support),两个模块合起来是Spring IOC的重要核心实现,前提是两者都依赖core模块
beans,包含操作Java bean的接口和类。
context,包含cache、context、ejb、format、jndi等等相关包以及相关内容。
indexer,用于读取和管理组件索引
support,包含cache、mail、scheduling、ui freemarker相关包以及相关内容。
-
core,核心模块,包含对 Java 语法支持等等
主要包含对asm、cglib、core、lang、objenesis、util的支持
-
expression,Spring应用程序上下文中表达式语言的解析支持,从 Spring 3 开始引入,类似jsp的EL语言
-
instrument,从Spring 2 开始支持 Java的装配,以及对 Java agent的支持
-
jcl,从 Spring 5 开始,是 Spring 新型的日志框架,用来帮助 Spring 进行统一的日志管理
-
jdbc,JDBC相关内容,Spring 对JDBC的包装,使JDBC更加容易使用,并减少了常见错误的可能性
-
jms,Java message service,即 Java 消息服务,Spring 希望通过 api 方式来实现 Java message 的统一实现。
-
messaging,Spring 针对消息服务的统一实现,有对应的API 和实现,包括 kakfa ,rabbitmq,rocketmq等
-
orm,O/R Mapping集成类的根目录,包含 Spring 对 jpa 或 hibernate 等整合实现,
-
oxm,O/X Mapping集成类的根目录,xml的编列,marshal 和 unmarshal,是xml的序列化和反序列化
-
test,测试,包含了mock、testcontext、springmvc 和 webclient 的测试,一般不需要日常maven引入,或者代码里可以通过来排除
-
tx ,transaction,Spring的事务抽象,借鉴了 JavaEE 中 jpa 的事务实现和 jdbc 的事务实现,来统一封装事务。
-
web
http,HTTP客户端和服务端的抽象
remoting,Spring 远程处理
web , 公共的、通用接口,用于定义Spring的Web基础架构和其他框架模块之间的最小边界点。
-
webflux,其中包含DispatcherHandler,这是WebFlux服务器端点处理的主要入口点,包括用于将请求映射到处理程序,调用它们并处理结果的关键协定。
-
webmvc,提供应用程序上下文、Spring Web MVC框架的核心接口和类集成的servlet。
-
websocket,websocket相关的通用抽象和Spring 配置
Spring 中用到的编程模型
面向对象编程
- 契约接口:Aware、BeanPostProcessor……
-
Aware:接口处理,大部分接口继承并加入对应的set*方法,如ApplicationContextAware、BeanFactoryAware
-
BeanPostProcessor :Bean生命周期的后置处理,里面运用了 Java 8 的 default 方法实现
- 设计模式:观察者模式、组合模式、模板模式……
-
观察者模式:ApplicationEvent,基于Java Event实现
-
组合模式:Composite
-
模板模式:JdbcTemplate
- 对象继承:Abstract* 类,Spring 中有很多抽象类
面向切面编程
-
动态代理:JdkDynamicAopProxy
-
字节码提升:ASM、CGlib、AspectJ
面向元编程
- 注解:模式注解(@Component、@Service、@Respository…)
-
java 语言规范注解之间不能有继承关系,所以 Spring 中很多注解都是派生的关系
-
@Component:组件,@Respository/@Service/@Controller都是@Component的派生注解
- 配置: Environment抽象、PropertySources、BeanDefinition…
- Environment抽象:
- 从 Spring 3.1 开始引入,包含一些 Profiles,profile 可以认为是用户配置,可以对不同系统进行区分,如开发是 dev,生产环境是 prod
- 包含一些属性,通过 PropertyResolver 中的 getProperty 来获取
- 泛型:GenericTypeResolver、ResolvableType…
- ResolvableType
函数驱动
- 函数接口:ApplicationEventPublisher
-
Java 中的函数接口是 FunctionalInterface
-
Spring的函数接口有且仅有一个抽象方法,不包含Object中的方法以及default的实现
- Reactive:Spring WebFlux
- WebFlux:
模块驱动
-
Maven Artifacts
-
OSGI Bundles
-
Java 9 Automatic Modules
-
Spring @Enable*