Java教程

Spring源码解析(一)

本文主要是介绍Spring源码解析(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Spring源码解析(一)

  • 认识Spring
  • Spring演进历史
    • Spring 0.9
    • Spring 1.x
    • Spring2.x
    • Spring 3.x
    • Spring4.x
    • Spring5.x
  • Spring启动流程

认识Spring

Spring的起源可以追溯到Rod Johnson于2002年出版的《Expert One-to-One J2EE Design and Development》一书。在这本书中,Rod展示了他的interface21框架,力图冲破J2EE传统开发的困境,从实际需求出发,着眼于轻便、灵巧,易于开发、测试和部署的轻量级开发框架。Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版。同年他又推出了一部堪称经典的力作《Expert one-on-one J2EE Development without EJB》,该书在Java世界掀起了轩然大波,不断改变着Java开发者程序设计和开发的思考方式。在该书中,作者根据自己多年丰富的实践经验,对EJB的各种笨重臃肿的结构进行了逐一的分析和否定,并分别以简洁实用的方式替换之。至此一战功成,Rod Johnson成为一个改变Java世界的大师级人物。
Spring在早期的beta和发布备选版本阶段进行得很迅速,第一个正式版本1.0在2004年3月24日发布。Spring是指一个用于构建JAVA应用程序的轻量级框架。这句话有两层意思:
  1. 首先,你可以采用Spring来构建任何应用程序,这和Apache Struts这样的框架不同,不是仅仅用于WEB应用。
  2. 其次,“轻量级”并不意味着类的数量很少,或者发行包很小。实际上,指的是Spring的哲学原则——最少的侵入。

Spring演进历史

Spring 0.9

这是该框架第一个公开发布的版本,以Exper One-on-One:J2EE Design and Development一书 为基础,本书主要概括了当时Java企业应用程序开发的现状已经指出了JavaEE和EJB框架的缺陷,提供了Bean配置基础、AOP支持、JDBC抽象框架、抽象事务支持等。该版本没有官方参考文档,但可以在SourceForge上找到源代码和文档。

Spring 1.x

Spring发布的第一个带有官方参考文档(从Spring 1.1.1开始)的版本。主要由七个模块组成。

在这里插入图片描述
Core: 框架的最基本部分,提供了依赖注入来管理Bean容器。
Dao: 提供了JDBC抽象层,从而无需进行繁琐的JDBC编码和数据库特定错误代码的解析。JDBC包不仅为实现特殊接口的类,而且为所有POJO(普通JAVA对象)提供了一种编程以及声明式的事务管理。
Contenxt: ApplicationContext、UI、验证、JNDI、Enterprise JavaBean(EJB) 、远程处理和邮件支持等。
ORM: 为流行对象关系映射API提供了集成支持。
AOP:提供AOP Alliance兼容的面向切面的编程实现。
WEB:提供了基本的面向WEB的集成功能。如:使用Servlet侦听器初始化上下文以及面向WEB的应用程序上下文。
WEB MVC:为WEB应用程序提供了Model-View-Controller(MVC)实现。

Spring2.x

在这里插入图片描述
● 增加了对国际化(i18n),事件传播,资源加载以及通过Servlet容器透明创建上下文的支持。
● 通过使用新的基于XML Schema的配置而不是DTO格式来简化XML配置。值得注意的改进方面包括bean定义、AOP以及声明式事务。
● 用于Web和门户的新bean作用域(请求、会话和全局会话)。
● 支持AOP开发的@AspectJ注解。
● Java Persistence API(JPA)抽象层。
● 完全支持异步JMS消息驱动的POJO(用于普通的旧Java对象)。
● JDBC简化包括在使用Java5+时的SimpleJdbcTemplate。
● JDBC命名参数支持(NamedParameterJdbcTemplate)。
● 针对Spring MVC的表单标签库。
● 对Porlet MVC框架的介绍。
● 动态语言支持。可以使用JRuby、Groovy以及BeanShell来编写bean。
● JMX中的通知支持以及可控的MBean注册。
● 为调度任务而引入的TaskExecutor注册。
● 为调度任务而引入的TaskExecutor抽象。
● Java注解支持,特别针对@Transactional、@Required和@AspectJ。

Spring 3.x

在这里插入图片描述
● 支持Java5功能,例如泛型、可变参数以及其他改进。
● 对Callables、Futures、ExceutoService适配器和ThreadFactory集成提供很好的支持。
● 框架模块目前针对每个模块JAR都使用一课源代码树进行分别管理。
● Spring Expression Language(SpEL)的引入。
● 核心Java Config功能和注解的集成。
● 通用型转换系统和字段格式化系统。
● 全面支持REST。
● 新的MVC XML名称空间和其他注解,例如Spring MVC中的@CookieValue和@RequestHeaders。
● 验证增强功能和JSR-303(bean验证)支持。
● 对JavaEE6的早期支持,包括@Async/@Asynchronous注解、JSR303、JSF2.0、JPA2.0等。
● 支持嵌入式数据库,例如HSQL、H2和Derby。

Spring4.x

在这里插入图片描述
Spring第一个完全支持Java 8的版本。虽然仍然可以使用较旧版本的Java,但Java SE6已经提出了最低版本要求。启用的类和方法已经被删除,但模块组织几乎相同。
● 从先前的Spring 3 版本中删除弃用的软件包和方法。
● 支持Java8,将最低Java版本提高到6 update 18。
● Java EE6 及以上版本现在被认为是Spring Framework 4.0的基准。
● Groovy bean定义DSL,允许通过Goovy语法配置bean定义。
● 核心容器、测试和一般web改进。
● WebSocket、SocJS、和STOMP消息。

Spring5.x

整个框架代码都基于Java 8,并且自2016年7月起与Java 9完全兼容。
● 充分利用Java 8 的强大功能,从而在性能上得到极大的改进。
● 支持Portlet、Veloctiy、JaspReports、XMLBeans、JDO、Guava、Tiles 2和Hibernate 3。
● 现在XML 配置名称空间被流式传输到未版本化的模式;虽然特定版本的声明仍然被支持,但要针对最新的XSD架构进行验证。
● Resource 抽象为防御 getFile 访问提供了isFile指示符。
● Spring 提供的Filter实现完全支持Servlet 3.1签名。
● 支持 Protobuf 3.0。
● 支持JMS 2.0+和JPA 2.0+。
● 引入了Spring Web Flow,这是一个用于替代Spring MVC的项目,构建在反应式基础之上,这意味着他完全是异步和非阻塞的,主要用户事件循环执行模型,而非传统的每个请求执行模式都带有一个线程的大型线程池(基于Project Reactor构建)。
● Web 和核心模块适用于反应式编程模型。
● Spring 测试模块有了很大的改进。现在支持JUnit 5,引入了新的注解来支持 Jupiter 编程和扩展模型,例如@SpringUnitConfig、@SpringJUnitWebConfig、@EnabledIf和@DisabledIf。
● 支持在 Spring TestContext Framework 中实现并行测试执行。

Spring启动流程

Spring的IoC容器在实现控制反转和依赖注入的过程中,可以划分为两个阶段:

● 容器启动阶段
● Bean实例化阶段

容器初始化

  1. 加载配置
  2. 分析配置信息
  3. 将Bean信息装配到BeanDefinition
  4. 将Bean信息注册到相应的BeanDefinitionRegistry
  5. 其他后续处理

容器实例化

  1. 根据策略实例化对象
  2. 装配依赖
  3. Bean初始化前处理
  4. 对象初始化
  5. 对象其他处理
  6. 注册回调接口
这篇关于Spring源码解析(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!