Spring 框架的官方图片
这张图信息很有限, 只是描述了下spring 框架的modules,
核心部分
官方描述
Core 和 Beans 两个模块 提供了框架的基本支持, 主要包含了 IOC (控制反转) 和 DI (依赖注入) 特性, BeanFacotry 作为工厂模式的超级接口, 耦合低
总而言之: core 和 beans 主要控制了Object 的构成, 无论是自身还是依赖, 一切都是以此为基础的。
Context 模块 在 core 和 beans 两个模块基础之上构建, 继承了beans模块特性, 并且添加了国际化支持,事件传播,资源加载, 开发式的上下文构建, 还支持 J2EE 特性,如EJB,JMX,还有基本的远程调用, 超级接口 ApplicationContext
Expression Language 表达式支持, 这个主要就是用来支持一些spring XML 配置文件表达式 和 注解中一些表达式解析,让配置有动态特性
总览设计
系统最基础模块就是core 和 beans,由此可见控制一个bean的构成对于一个容器框架的总要性,至于context
应用对象的载体
其实从总体来看的话一切就变的有条理,细节再深入
由spring的版本来看一些问题, 大概在spring2.5 之前spring都是以单独模块发布的 (具体不明确), 直接一个spring.jar,但是在spring2.5 之后spring更加详细的划分为以上的moduels发布,由此对于JAR包的分割也值得我们更加的细化了解框架结构, 还是值得思考和学习的
在我看来就是功能更加细化, 各个部分的依赖关系明确,为spring的良好的结构和扩展打下坚实的基础
spring core 的包分布
核心部分的设计当然是我最关心的, 到底哪些功能可以被划分到核心功能里面呢? 我自己也是带着这样的疑问去看的
首先看core 下面的包分布
看看核心部分定义了那些超级接口, 这个最方便的是查看API 文档 (学会使用API文档对我们理解一个框架构成非常重要)
1. AliasRegistry 别名管理 如果是我的话可能就把这个扔到context包中了
2. AttributeAccessor 对于对象元数据的访问
3. ErrorCoded 异常码 原来spring也有这东西, 哎 我还不知道
4. ControlFlow 调用栈信息
PS 原来是这样访问当前调用栈信息的 new Throwable().getStackTrace(); 有点意外
5. InfrastructureProxy 获取代理对象
6. ParameterNameDiscoverer 抓取方法和构造器的参数名称 --- 咋做到的 我看到了在Aop中使用了他
7. ordered bean 优先级
8. PriorityOrdered 优先执行 PS : 想看看spring优先执行了那些 看看他的实现类吧
还有个子包下面都是和自身有关的接口定义
总体来说,spring core 主要还是负责环境配置信息,资源访问,type的元数据 不多 但是体现了这些在框架中的的重要性
spring Beans 的包结构
包结构比较简单 核心在Facotry , 其他不列 功能明确 工厂, 当然核心也是这里,其实这里也能让你感觉到IOC/DI 和工厂的一些联系
关键的类
public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWrapper
SPRING BEAN 有那些? 生命周期
InitializingBean,DisposableBean 生产和销毁
#JSR-250 @PostConstruct @PreDestroy 分别对应着 InitializingBean afterPropertiesSet 和 DisposableBean destroy 两个方法
FactoryBean 经过加工修饰的BEAN / 一个BEAN 两个对象可以切换引用 具体使用查看相关文档
SPRING CONTEXT 精力有限 , 关注一些扩展点
==================================
事件扩展点, 事件本身能为项目带来解耦, 或者可以让业务划分为主业务和旁支业务, 保证最终一致性即可 如果是在分布式的环境中还可以和消息驱动结合起来
ApplicationEvent (定义) , ApplicationEventPublisherAware(发布) ,ApplicationListener (监听)
================================== 容器中BEAN 的创建的拦截处理
BeanPostProcessor , InitializingBean
================================== Factory 构建拦截
BeanFactoryPostProcessor
================================== I18N 支持
MessageSource
欢迎关注公众号: