玖叶教程网

前端编程开发入门

全了,3000字概括Spring的体系架构,值得收藏

起源

关于Spring的发展起源要回溯到2002年,当时正是J2EE和EJB大行其道的时候,很多知名公司都是采用此技术方案进行项目开发。这时候有一个美国的小伙子认为EJB太过臃肿,并不是所有的项目都需要使用EJB这种大型框架,应该有一种更好的方案来解决这个问题。

他为了证明自己的想法是正确的,在2001年10月写了一本书《Expert One-on-One J2EE》,介绍了当时Java企业应用程序开发的情况,并指出了JavaEE和EJB组件框架中存在的一些主要缺陷。在这本书中,他提出了一个基于普通Java类和依赖注入的更简单的解决方案。在书中,他展示了如何在不使用 EJB 的情况下构建高质量、可扩展的在线座位预留系统。为了构建应用程序,他编写了超过30000行的基础结构代码,项目中的根包命名为com.interface21,所以人们最初称这套开源框架为interface21,这就是 Spring 的前身。

这个小伙子是谁呢?他就是大名鼎鼎的Rod Johnson。

Rod Johnson在悉尼大学不仅获得了计算机学位,同时还获得了音乐学位。更令人吃惊的是在回到软件开发领域之前,他还获得了音乐学的博士学位,反正就是牛逼哄哄的人物。但是现在Rod Johnson已经离开了Spring(2012 年 Rod Johnson 宣布他将要离开 Spring Source ),成为了一个天使投资人,同时也是多个公司的董事,早已走上人生巅峰。

在《Expert One-on-One J2EE》这本书发布后,一对一的J2EE设计和开发一炮而红。这本书免费提供的大部分基础架构代码都是高度可重用的。2003年Rod Johnson和同伴在此框架的基础上开发了一个全新的框架,命名为 Spring,据Rod Johnson介绍 Spring 是传统 J2EE 新的开始,随后 Spring 发展进入快车道。

2004 年 03 月,1.0 版发布。

2006 年 10 月,2.0 版发布。

2007 年 11 月,更名为 SpringSource,同时发布了 Spring 2.5。

2009 年 12 月,Spring 3.0 发布。

2013 年 12 月,Pivotal 宣布发布 Spring 框架 4.0。

2017 年 09 月,Spring 5.0 发布。

What Is Spring?

或许想解释清楚Spring到底是什么是件很困难的事情。通常,Spring是指一个用于构造Java应用程序的轻量级框架,这句话包含两个有趣的地方。首先,你可以采用Spring来构造任何程序,这与Apache Struts这样的框架不同,你不限定于只编写WEB应用。其次,以上解释中的“轻量级”并不意味着类数量很少,或者发行包大小很小,实际上,它指的是Spring哲学原理的总称——那就是最少的侵入。Spring是轻量级的,意味着你只需对你的程序代码做很少改动 (假若有的话) ,就可以获得Spring核心带来的好处,你也可以在任何时候选择抛弃Spring ,你会发现这实在很容易。注意,上面这句话只针对Spring核心本身——很多附加的Spring组件,比如数据访问,需要与Spring框架有相对紧密得多的耦合关系。但是,这些耦合带来的好处显而易见。

Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

What is 最少的侵入?

这里讲一下侵入式和非侵入式。简单的说,假设我们想把一些业务代码放到一个框架里。侵入式的做法是要求业务代码”知道”框架的代码,表现为业务代码需要继承框架提供的类,才能很好地和框架结合,使用框架带来的便利。非侵入式则不需要业务代码引入框架代码的信息,即无需继承框架提供的类,从编写者的角度来看,察觉不到框架的存在。

例如:使用struts的时候,我们需要继承一些struts的类,这时struts侵入到了我的业务代码里。使用spring编写一些业务类的时候不需要继承spring特定的类,通过配置完成依赖注入后就可以使用,此时spring就没有侵入到我的代码里。侵入式让业务代码产生对框架的依赖,这些代码不能在框架之外使用,不利于代码的复用。但是侵入式可以使用户和框架更好的结合,更容易更充分地利用框架提供的功能。非侵入式的代码对框架则没有过多的依赖,可以很方便地迁移到其他地方使用,代码的复用性较好。但是框架和业务代码互动的方式可能就比较复杂。总之,这两种方式各有千秋,各有利弊,主要看实际开发时的权衡选择了。

那么非侵入式的技术体现,即允许在应用系统中自由选择和组装Spring框架的各个功能模块,并且不强制要求应用系统的类必须继承或实现Spring框架的类和接口来达到使用框架的目的。

如何实现非侵入式:

1、引用反射机制,通过动态调用的方式来提供各方面的功能,建立核心组件BeanFactory

2、配合使用Spring框架中的BeanWrapper和BeanFactory组件类最终达到对象的实例创建和属性注入 其实非侵入式就是不需要继承框架提供的类,而是通过配置完成依赖注入后,就可以使用。允许所开发出来的应用系统能够在不同的环境中自由移植,不需要修改应用系统中的核心代码。

Spring的体系结构

Spring框架至今已集成了20多个模块,这些模块分布在以下模块中:

  1. 核心容器(Core Container)
  2. 数据访问/集成(Data Access/Integration)层
  3. Web层
  4. AOP(Aspect Oriented Programming)模块
  5. 植入(Instrumentation)模块
  6. 消息传输(Messaging)
  7. 测试(Test)模块

1.核心容器

Spring的核心容器是其他模块建立的基础,有Spring-core、Spring-beans、Spring-context、Spring-context-support和Spring-expression(String表达式语言)等模块组成。

  • Spring-core模块:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)功能。
  • Spring-beans模块:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。
  • Spring-context模块:建立在Core和Beans模块的基础之上,提供一个框架式的对象访问方式,是访问定义和配置的任何对象的媒介。ApplicationContext接口是Context模块的焦点。
  • Spring-context-support模块:支持整合第三方库到Spring应用程序上下文,特别是用于高速缓存(EhCache、JCache)和任务调度(CommonJ、Quartz)的支持。
  • Spring-expression模块:提供了强大的表达式语言去支持运行时查询和操作对象图。这是对JSP2.1规范中规定的统一表达式语言(Unified EL)的扩展。该语言支持设置和获取属性值、属性分配、方法调用、访问数组、集合和索引器的内容、逻辑和算术运算、变量命名以及从Spring的IOC容器中以名称检索对象。它还支持列表投影、选择以及常用的列表聚合。

2.AOP和Instrumentation

  • Spring-aop模块:提供了一个符合AOP要求的面向切面的编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以便干净地解耦。
  • Spring-aspects模块:提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的AOP框架。
  • Spring-instrument模块:提供了类植入(Instrumentation)支持和类加载器的实现,可以在特定的应用服务器中使用。

3.消息

Spring4.0以后新增了消息(Spring-messaging)模块,该模块提供了对消息传递体系结构和协议的支持。

4.数据访问/集成

数据访问/集成层由JDBC、ORM、OXM、JMS和事务模块组成。

  • Spring-jdbc模块:提供了一个JDBC的抽象层,消除了繁琐的JDBC编码和数据库厂商特有的错误代码解析。
  • Spring-orm模块:为流行的对象关系映射(Object-Relational Mapping)API提供集成层,包括JPA和Hibernate。使用Spring-orm模块可以将这些O/R映射框架与Spring提供的所有其他功能结合使用,例如声明式事务管理功能。
  • Spring-oxm模块:提供了一个支持对象/XML映射的抽象层实现,例如JAXB、Castor、JiBX和XStream。
  • Spring-jms模块(Java Messaging Service):指Java消息传递服务,包含用于生产和使用消息的功能。自Spring4.1以后,提供了与Spring-messaging模块的集成。
  • Spring-tx模块(事务模块):支持用于实现特殊接口和所有POJO(普通Java对象)类的编程和声明式事务管理。

5.Web

Web层由Spring-web、Spring-webmvc、Spring-websocket和Portlet模块组成。

  • Spring-web模块:提供了基本的Web开发集成功能,例如多文件上传功能、使用Servlet监听器初始化一个IOC容器以及Web应用上下文。
  • Spring-webmvc模块:也称为Web-Servlet模块,包含用于web应用程序的Spring MVC和REST Web Services实现。Spring MVC框架提供了领域模型代码和Web表单之间的清晰分离,并与Spring Framework的所有其他功能集成。
  • Spring-websocket模块:Spring4.0以后新增的模块,它提供了WebSocket和SocketJS的实现。
  • Portlet模块:类似于Servlet模块的功能,提供了Portlet环境下的MVC实现。

6.测试

Spring-test模块支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。


最后,感谢阅读~

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言