Spring 框架宗旨:不重复造轮子,让原有技术使用起来更加方便。
一、Spring模块
从Spring3开始,Spring进行了模块化,将原先的一个jar包拆分成很多个jar包,允许你挑选和选择适用于你的模块,不必要把剩余部分也引入。
Spring 框架(框架是一个半成品)提供约 20 个模块,,这些模块分为核心容器、数据访问/集成、Web、AOP、Instrumentation、消息和测试,可以根据应用程序的要求来使用,如下图所示:
1. 核心容器
核心容器由spring-core、spring-beans、spring-context、spring-context-support和spring-expression 5个模块构成。
spring-core和spring-beans模块为框架提供最基本的功能,包括IoC和依赖注入。BeanFactory是一个工厂的实现类。它可以免除用户手动创建单例类并且对象之间解耦。
context(spring-core)模块基于spring-beans和BeanFactory两个模块,允许以框架方式访问对象,这类似于JNDI。Context模块继承了Beans模块,并支持国际化、事件传播、资源加载等。Context模块支持Java EE特性,如EJB、JMX、远程访问。spring-context接口是Contet模块的重点。spring-context-support提供将第三方库集成到Spring的功能,如缓存(EhCache,JCache)和任务调度(CommonJ,Quartz)等。
spring-expression模块提供强有力的在运行时查询和操作对象的语言。这种语言支持获取和设置属性、方法执行、获取数组或集合中的对象、逻辑计算、命名变量,在Spring的IoC容器中获得对象。
核心容器是Spring 启动最基本的条件。
2. AOP 和 Instrumentation
spring-aop模块提供切面编程的实现。可以自定义方法拦截和切入点。
spring-aspects模块提供与AspectJ的集成。
spring-instrument模块为特定的服务器提供类加载服务。spring-instrument模块是集成了Tomcat。
3. Data Access/Integration
这一层由JDBC、ORM、OXM、JMS、和事物模块组成。
spring-jdbc模块,主要为了解决数据库繁多的问题,应用此可不需要关注使用的数据库。
spring-tx模块提供编程式或声明式事务处理。
spring-orm模块提供流行的对象关系映射的APIs,包含JPA和Hibernate.
spring-oxm模块提供对Object/XML映射的支持,例如JAXB,Castor,JiBX和XStream。
spring-jms模块(Java消息服务)包含生成和消费消息的功能。在Spring4.1以后,它集成了spring-messaging模块。
4. Messaging(消息)
Spring4提供了spring-messaging模块,主要类有Message,MessageChannel,MessageHandler。这个模块还包含一些映射消息到方法的注解,类似于Spring MVC基于编程模式的注解。
5. Web
Web层包含spring-web、spring-webmvc和spring-websocket 3个模块。
spring-web模块提供面向Web方法的集成特性,例如多部分文件上传、通过监听初始化IoC容器和面向Web的Context,还包含HTTP客户端和对远程的支持。
spring-webmvc模块(也被称作Web-Servlet模块)包含Spring MVC框架。
spring-websocket模块提供对socket的全面支持。
6. Test(测试)
spring-test模块通过JUnit或者TestNG来对Spring的模块进行单元测试和集成测试。它提供一致的Spring 的ApplicationContexts 和context的缓存。它还提供mock对象让你测试你的代码。
二、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的支持 |
三、Spring核心功能
1. IoC/DI :控制反转/依赖注入
2. AOP:面向切面编程
3. 声明式事务
四、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/