spring framework -- 整体架构

Spring 框架的官方图片

  这张图信息颇有限, 只是描述了下spring 框架的modules, java

核心部分

  1. Beans
  2. core
  3. context
  4. Expression Language

官方描述 

Core 和 Beans 两个模块 提供了框架的基本支持, 主要包含了 IOC (控制反转) 和 DI (依赖注入) 特性, BeanFacotry 做为工厂模式的超级接口, 耦合低 spring

总而言之: core 和 beans 主要控制了Object 的构成, 不管是自身仍是依赖, 一切都是以此为基础的。 架构

Context 模块 在 core 和 beans 两个模块基础之上构建, 继承了beans模块特性, 而且添加了国际化支持,事件传播,资源加载, 开发式的上下文构建, 还支持 J2EE 特性,如EJB,JMX,还有基本的远程调用, 超级接口 ApplicationContext

Expression Language  表达式支持, 这个主要就是用来支持一些spring XML 配置文件表达式 和 注解中一些表达式解析,让配置有动态特性 app

总览设计

系统最基础模块就是core 和 beans,因而可知控制一个bean的构成对于一个容器框架的总要性,至于context 
应用对象的载体 框架

其实从整体来看的话一切就变的有条理,细节再深刻

由spring的版原本看一些问题, 大概在spring2.5 以前spring都是以单独模块发布的 (具体不明确), 直接一个spring.jar,可是在spring2.5 以后spring更加详细的划分为以上的moduels发布,由此对于JAR包的分割也值得咱们更加的细化了解框架结构, 仍是值得思考和学习的 分布式

在我看来就是功能更加细化, 各个部分的依赖关系明确,为spring的良好的结构和扩展打下坚实的基础 工具

spring core 的包分布

  1.    asm class级别操做
  2.    cglib 代理生成
  3.    core 这个是核心部分
  4.    utils 工具类集合, 大量的UTILS 别再造轮子了
   
   核心部分的设计固然是我最关心的, 到底哪些功能能够被划分到核心功能里面呢? 我本身也是带着这样的疑问去看的
   
   首先看core 下面的包分布
  1.    annotation (一些注解支持) 
  2.    covert (转换器 -- 一些基本的基本底层的转换器支持) 
  3.    enums(废弃) 
  4.    env (环境运行配置信息 -- 这固然是很是必要的) 
  5.    io  (用于加载框架使用的不一样资源) 
  6.    serializer 序列化 必不可少 可概括为特殊工具 
  7.    style (对象的格式化输出 / 没有看到太多的实现  可归类为特殊工具) 
  8.    task 任务调度 
  9.    type 对于BEAN 的定义class进行一个元数据分析(用于细粒度的控制) 
   
   看看核心部分定义了那些超级接口, 这个最方便的是查看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 两个对象能够切换引用 具体使用查看相关文档 spa

SPRING CONTEXT 精力有限 , 关注一些扩展点

================================== 
事件扩展点, 事件自己能为项目带来解耦, 或者可让业务划分为主业务和旁支业务, 保证最终一致性便可 若是是在分布式的环境中还能够和消息驱动结合起来  设计

ApplicationEvent (定义) , ApplicationEventPublisherAware(发布) ,ApplicationListener (监听) ================================== 容器中BEAN 的建立的拦截处理 BeanPostProcessor , InitializingBean ================================== Factory 构建拦截 BeanFactoryPostProcessor  ================================== I18N 支持 MessageSource

相关文章
相关标签/搜索