Spring整体架构:
spring是一个分层架构,分为以下模块:
Core Container
Core 模块 主要是spring框架使用的基础工具类。spring-core.jar
Beans模块 主要包括读取配置、Factory、IOC、DI等相关类。spring-beans.jar
Context模块 框架的访问入口。spring-context.jar
Expression Language模块 统一表达式语言(unified EL)的扩展模块。spring-expression.jarAop-设备支持模块
AOP模块: spring另一主要核心模块,利用JVM的 动态代理为基础,以PointCut为切入点,扩展业务需求。
aspects(一个面向切面的框架),主要提供各种面向切面的AOP方法。
instrumentation AOP模块的一个支援模块,用于JVM启动时生成代理,修改类的字节,从而改变一个类的逻辑,实现AOP功能。DataAccess/Integration
spring-jdbc模块:spring对JDBC框架的实现,主要提供JDBC模版方式,关系数据对象化方式,simplejdbc方式,事务管理,从而简化JDBC编程(JdbcTemplate、SimpleJdbcTemplate、NamedParameterJdbcTemplate)
spring-tx模块:spring jdbc 事务控制模块。(AOP)
spring-orm模块:主要集成Hibernate、JPA、JDO用户资源管理、数据访问对象的实现和事务策略。
spring-jms模块:能够发送和接受消息。
spring-oxm模块:Java对象与XML数据相互映射。- web模块
spring-web模块:最基础的web支持。
spring-mvc模块:web-servlet模块。
spring-websocket模块:消息推送
spring-webmvc-portlets模块:为SPRING-MVC提供Portlets组件支持。(可插拔用户接口组件)
spring-messaging模块:集成的一些报文传送应用。 - Test模块
test模块:为测试提供支持。
(学习路线:core-ioc-aop-context-web 对应源码包:spring-core、spring-beans、spring-aop、spring-context、spring-web)
SPRING-CORE
SPRING-BEANS
(学习之前了解一下 JAVA的工厂模式以及代理模式,了解一下ThreadLocal,Cglib的用法)
1. XmlBeanFactory
1.1创建IOC配置文件的抽象资源(Resource),这个抽象资源包括BeanDefination的定义信息
1.2 创建BeanFactory(DefaultListablebBeanFactory等实现类)
1.3资源读取器,对XML、文件、URL等资源进行读取,这里的配置文件对应 BeanDefinition实例(BeanDefinitionHolder、AbstractorBeanDefinitio),并回传给BeanFactory.
1.4完成对Bean的载入和注册,最后生成一个 IOC容器(HASHMAP)
2.ApplicationContext
ApplicationContext是高级的容器,用于加载Bean配置,抽象成BeanDefinition实例,当有请求时生成Bean实例。另外ApplicationContext还实现一些扩展接口 MessageSource(支持不同信息源)、ResourcePatternResolver(对不同的Resource支持)、ApplicationEventPublisher(为应用引入了事件机制更好管理Bean周期)、Envitonment(丰富IOC功能)、ListableBeanFactory和HierachicalBeanFactory(容器)。
(学习小结:此前学习spring源码初衷是更多的了解其中的原理,但实际看到源码,发现里面的代码设计结构,以及接口、静态类的使用,更好的实现了对java的特性的诠释,用之前参考资料的一句话 叫做 代码之美)