Spring 5 , 狭义上的spring 以及 广义上的spring , spring 设计模式
Spring 5 距离 Spring4 发布有4年多, 所以说Spring 5是一个重要的版本
要构建和运行Spring 5应用程序, 至少需要Java EE 7 和JDK 8 , 之前的JDK和Java EE版本不再支持
Java EE 7 包含以下内容
Servlet 3.1
JMS 2.0
JPA 2.1
JAX-RS 2.0
Bean Validation 1.1 与Java基准类似, 许多其他框架的基准也有变化
Hibernate 5
Jackson 2.6
EhCache 2.10
JUnit 5
Tiles 3
另外,各种服务器的最低支持版本也已经升级
Tomcat 8.5+
Jetty 9.4+
WildFly 10+
Netty 4.1+
Undertow 1.4+
同时,Spring 5 已经与java EE 8 API集成 , 这意味着用户可以使用Spring5来创建新功能的应用。 因为当初Oracle将Java EE 8 给了Eclipse开源基金会,Java EE后续的技术更新全部交给了Eclipse基金会。 并且java EE 后续更新会向后兼容,包括java EE 8 的所有API.
spring5 引入了响应式编程模型与函数式编程
响应式编程模型
web开发将会划分两个分支, 即传统的基于Servlet的Web编程(Spring-webmvc模块) 和使用Spring WebFlux实现响应式编程(spring-web-reactive模块)
函数式编程
函数式Web框架, 引入了两个基本组件: HandlerFunction和RouterFunction
狭义上的spring --- Spring Framework(spring框架)
spring框架实现了对bean的依赖管理(IoC)及AOP的编程方式, 提高了编程效率, 降低了代码之间的耦合
spring框架是模块化的, 允许自由选择需要的部分, 基本涵盖了企业开发需要的模块, 以下为spring常用模块
Core Container (核心容器)
由spring-core , spring-beans , spring-context , spring-context-support 和spring-expresstion(Spring Expression Language) 模块组成
1 spring-core 模块是spring框架基本的核心工具类
2 spring-beans模块提供框架的基础部分, 包括IoC和DI(Dependency Injection). BeanFactory是一个复杂的工厂模式的实现,消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置从而实现解耦,IoC就是一个大工厂。 beans模块包含了配置文件,创建和管理bean以及进行IoC/DI相关操作的类
3 spring-context 模块建立在core和beans模块的基础功能上, 它的作用是实现对象存储操作
4 spring-expression 用在运行时查询和操作对象图的表达式语言
AOP 和Instrumentation
spring-aop模块提供AOP的实现, 从而能够实现方法拦截器和切入点完全分离代码, 直接将面向切面的编程功能集成到Spring框架上
单独spring-aspects 提供了集成使用AspectJ
spring-instrument模块提供了instrumentation和类加载器(classloader)的实现, 使得可以在特定的应用服务器上是使用
spring-instrument-tomcat用于Tomcat-Instrumentation代理
消息
spring-messaging模块 , 提供消息基础服务, 该模块还包含一组消息映射方法的注解, 类似于基于编程模型中的SpringMVC的注解
数据访问/集成(Data Access/Integration)
由JDBC, ORM, OXM , JMS和Transaction模块组成
spring-jdbc模块提供了一个JDBC抽象层, 这样开发人员能避免一些烦琐的JDBC编码
spring-tx 模块支持用于实现特殊接口和所有POJO类的编程及申明式事务管理
spring-orm (object relationship mapping模块为流行的对象-关系映射API , 如JPA , JDO, Hibernate , iBatis(mybatis)等
spring-oxm 模块提供了一个支持Object/XML映射实现的抽象层, 如JAXB , Castor, JiBX ,和 XStream
spring-jms (Java Messaging Service) 模块用于包含用于生成和使用消息的功能.
transaction 模块支持编程和声明式的事务管理, 这些事务类必须实现特定的接口,并且对所有的POJO都适用
Web
Web层由spring-web , spring-webmvc , spring-websocket , 和spring-webflux组成
spring-web模块提供了基本的面向web开发的集成功能
spring-webmvc模块(也称Web Servlet模块)包含Spring的MVC功能和REST服务功能
spring-websocket模块是基于WebSocket\协议通信的程序开发
spring-webflux模块是spring5新添加的支持响应式编程的Web开发框架
测试
spring-text模块支持通过组合JUnit或TestNG来实现单元测试和集成测试等功能.
广义上的Spring---Spring技术栈
Spring Data (对各种数据库的支持), Spring Batch (批处理轻量级框架) , Spring Integration (集成技术) , Spring Security (身份认证和访问控制框架) , Spring Mobile(移动web开发)Spring for Android (用于简化Andorid 原生应用程序开发) , Spring Boot (Spring团队提供的全新框架) , Spring Cloud
注意: 约定: 由于Spring 是早期的Spring框架, 现在:"Spring 框架"指狭义上的Spring , "Spring" 指广义上的Spring技术栈
spring设计模式
Spring使用POJO模式的强大功能来实现企业应用程序的轻量级和最小侵入性的开发.
Spring使用依赖注入模式(DI模式) 实现松耦合, 并使系统可以更加面向接口编程
Spring使用Decorator 和 Proxy设计模式进行声明式编程
Spring使用Template设计模式消除样板代码