Spring框架介绍

Spring框架宗旨:不重复造轮子,让原有技术使用起来更加方便。

一、Spring Framework的整体架构

Spring Framework总共有十几个组件,其中核心组件只有三个:Core、Context 和 Beans。

Spring Framework 3.x 的总体架构图

组成 Spring Framework的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

Spring Core(核心容器):核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

Spring Context(上下文):Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如:JNDI、EJB、电子邮件、国际化、校验和调度功能。

Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

Spring Web模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

Spring MVC框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

从图中可以看出,IOC 的实现包 spring-beans 和 AOP 的实现包 spring-aop 也是整个框架的基础,而 spring-core 是整个框架的核心,基础的功能都在这里。

在此基础之上,spring-context 提供上下文环境,为各个模块提供粘合作用。

在 spring-context 基础之上提供了 spring-tx 和 spring-orm包,而web部分的功能,都是要依赖spring-web来实现的。

Spring Framework 4.x 的系统架构图

Spring Framework 4.x对比Spring Framework 3.2.x的系统架构变化:

从图中可以看出,总体的层次结构没有太大变化,变化的是 Spring 4.0.3去掉了 struts 模块(spring-struts包)。现在的 Spring mvc的确已经足够优秀了,大量的 web 应用均已经使用了 Spring mvc。而 struts1.x 的架构太落后了,struts2.x 是 struts 自身提供了和 Spring 的集成包,但是由于之前版本的 struts2 存在很多致命的安全漏洞,所以,大大影响了其使用度,好在最新的2.3.16版本的 struts 安全有所改善,希望不会再出什么大乱子。

web 部分去掉了 struts 模块,但是增加 WebSocket 模块(spring-websocket包),增加了对 WebSocket、SockJS 以及 STOMP 的支持,它与 JSR-356 Java WebSocket API 兼容。另外,还提供了基于 SockJS(对 WebSocket 的模拟)的回调方案,以适应不支持 WebSocket 协议的浏览器。

同时,增加了 messaging 模块(spring-messaging),提供了对 STOMP 的支持,以及用于路由和处理来自 WebSocket 客户端的 STOMP 消息的注解编程模型。spring-messaging 模块中还 包含了 Spring Integration 项目中的核心抽象类,如 Message、MessageChannel、MessageHandler。

删除过时的包和方法。第三方类库至少使用2010/2011年发布的版本,尤其是Hibernate 3.6+, EhCache 2.1+, Quartz 1.8+, Groovy 1.8+, and Joda-Time 2.0+。Hibernate Validator要求使用4.3+,Jackson 2.0+。

Java 8支持。当然也支持Java6和Java7,但最好在使用Spring框架3.X或4.X时,将JDK升级到Java7,因为有些版本至少需要Java7。

Java EE 6和7。使用Spring4.x时Java EE版本至少要6或以上,且需要JPA 2.0和Servlet 3.0 的支持,所以服务器,web容器需要做相应的升级。一个更具前瞻性的注意是,Spring4.0支持J2EE 7的适用级规范,比如JMS 2.0, JTA 1.2, JPA 2.1, Bean Validation 1.1和JSR-236并发工具包,在选择这些jar包时需要注意版本。

核心容器提升等等。

二、Spring相关的jar包

 org.springframework   

 spring-aop   

 基于代理的AOP支持   

 org.springframework   

 spring-aspects   

 基于AspectJ 的切面编程   

 org.springframework   

 spring-beans   

 Beans的支持, 包括 Groovy   

 org.springframework   

 spring-context   

 应用程序运行时上下文,包括调度和远程抽象   

 org.springframework   

 spring-context-support   

 提供第三方库到Spring的支持   

 org.springframework   

 spring-core   

 核心工具类,被其他模块使用   

 org.springframework   

 spring-expression   

 Spring 表达式语言 (SpEL)   

 org.springframework   

 spring-instrument   

 代理JVM相关的   

 org.springframework   

 spring-instrument-tomcat   

 Tomcat的插件   

 org.springframework   

 spring-jdbc   

 提供jdbc的支持,包括数据源和JDBC访问   

 org.springframework   

 spring-jms   

 JMS支持包,包括接收和发送消息类的支持   

 org.springframework   

 spring-messaging   

 对消息传递体系结构和协议的支持   

 org.springframework   

 spring-orm   

 对象/关系  映射, 拨快对JPA 和 Hibernate的支持   

 org.springframework   

 spring-oxm   

 对象/XML 映射的支持   

 org.springframework   

 spring-test   

 对Spring组件单元测试和集成测试的支持   

 org.springframework   

 spring-tx   

 事务支持,包块DAO支持和JCA集成   

 org.springframework   

 spring-web   

 Web 支持,包括客户端和Web访问   

 org.springframework   

 spring-webmvc   

 一个MVC框架   

 org.springframework   

 spring-websocket   

 WebSocket 和SockJS 的实现,包括对STOMP的支持   

三、核心功能

  • IoC/DI :控制反转/依赖注入 
  • AOP:面向切面编程
  • 声明式事务

四、Spring各版本的特性

Spring3.1

  • 添加了引入环境profile功能
  • 添加了@enable注解,使用特定功能
  • 添加了对声明式缓存的支持,能够使用简单的注解声明缓存边界和规则
  • 添加的用于构造器注入的c命名空间,类似与Spring2的p命名空间,用于对应属性注入
  • 开始支持Servlet3.0,包括基于java配置中生命Servlet和Filter,不再只仅仅借助web.xml
  • 改善对于JPA的支持,让JPA能在Spring中完整配置JPA,不必再使用persistence.xml文件
  • 自动绑定路径变量到模型属性中
  • 提供了@RequestMappingProduces和consumes属性,用于匹配请求中的Accept和Content-Type头部信息
  • 提供了@RequestPart注解,用于将Multipart请求中的而某些部分绑定到处理器的方法参数中
  • 持Flash属性,在redirect请求后依然能够存活的属性,flash属性的RedirectAttribute类型
  • 为支持原生的EntityManager,Spring的JpaTemplate和JpaDaoSupport类已被废弃了来支持JPA 2.0,并在spring4中移除了

Spring3.2

  • @Autowired.@Value和@Bean注解能够作为元注解,用于创建自定义的注入和bean声明注解
  • @DateTimeFormat注解不再依赖JodaTime.如果提供了JodaTime,就会使用它,否则的话,会使用SimpleDateFormat;
  • Spring的声明式缓存提供了对JCache0.5的支持
  • 支持定义全局的格式来解析和渲染日期和时间
  • 在集成测试中,能够配置和加载WebApplicationContext
  • 在集成测试中,能够针对request和session作用域的bean进行测试

Spring4.0

  • Spring提供了对WebSocket编程的支持,包括支持JSR-356--Java API for WebSocket
  • 鉴于WebSocket仅仅提供了一种低层次的API,急需高层次的抽象,因此Spring4.0在WebSocket之上提供了一个高层次的面向消息的编程模型,
  • 该模型基于SockJS,并且包含了对STOMP协议的支持
  • 新的消息模块,很多的类型来源于Spring Integration项目。这个消息模块支持Spring的SockJS/STOMP功能,同时提供了基于模板的方式发布消息
  • Spring是第一批支持Java8特性的Java框架,比如它所支持的lambda表达式,别的暂且不说,这首先能够让使用特定的毁掉接口更加简洁,代码更加易读
  • 与Java8 同时得到支持的是JSR-310--Date与Time API,在处理时间和日期时,他为开发者提供了java.util.Date或java.util.Calendar更丰富的API
  • 为Groovy开发的应用程序提供了更加顺畅的编程体验,尤其是支持非常便利地完全采用Groovy开发Spring应用程序。随这些一起提供的是来自于Grails
  • 的BeanBuilder,借助它能够通过Groovy配置Spring应用
  • 添加了条件化创建bean的功能,在这里只有开发人员定义的条件满足时,才会创建所声明的bean
  • Spring4.0包含了Spring RestTemplate的一个新的异步实现,它会立即返回并且允许在操作完成后执行回调
  • 添加了对多项JEE规范的支持,包括JMS2.0.JTA1.2.JPA2.1和Bean Validation1.1

Spring5.0

Spring Framework 5.0 新特性 (请关注常规升级,说明了一些工具要求的最低版本) 本系列教程以 5.1.16.RELEASE 版本进行说明。

官网:https://spring.io/projects/spring-framework#learn

说明文档:https://docs.spring.io/spring/docs/5.1.16.RELEASE/spring-framework-reference/

中文文档:https://www.cntofu.com/book/95/index.html

五、参考

https://www.jianshu.com/p/3bd8b40400c9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codedot

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值