摘要:回顾笔者这几年的Java Web开发经历,最初使用Servlet与JSP技术进行开发,后来使用SSH架构进行开发,再后来使用Spring MVC架构进行开发,如今使用流行的Spring Boot架构进行开发。在Java Web开发领域,Spring的发展速度大
回顾笔者这几年的Java Web开发经历,最初使用Servlet与JSP技术进行开发,后来使用SSH架构进行开发,再后来使用Spring MVC架构进行开发,如今使用流行的Spring Boot架构进行开发。在Java Web开发领域,Spring的发展速度大大超出预期,
已经成为每个Java编程人员必须掌握的框架。Spring框架以其灵活、简易、快速等特性迅速抢占了Java企业级开发的市场,成为世界上最流行的企业级开发架构。
Spring发展到今天,已经不仅仅指Spring Framework,而且还代表Spring的整个家族。Spring可以为Java企业级开发提供强有力的支持,其庞大而活跃的社区及持续开源的代码贡献,为各大公司的应用服务提供了基础支撑。
Spring的发展历史
世界上有两种天才,一种是专注于本专业并做出突出贡献的人,另一种是不但在本专业中有所建树,而且在专业之外还有非常高的造诣。例如,爱因斯坦属于前者,而达·芬奇则属于后者。在Java领域也有这么一位天才,他就是悉尼大学的音乐学博士,而且他还是Spring Framework的创始人,他的名字叫Rod Johnson。
2002年Rod Johnson编写了Expert one-on-one J2EE Developmentwithout EJB一书,书中批评了J2EE架构的臃肿和低效,甚至提出,绝大多数的J2EE工程根本不需要EJB。这在当时引起了轩然大波。为了支持自己的理论,他编写了超过30 000行的基础结构代码,代码中的根包命名为com.interface21,当时人们称这套开源框架为interface21,这就是Spring框架的前身。从官网的描述中可以看到,Spring并不是J2EE的竞争对手,而是J2EE规范的补充及基于规范的实现。
Spring的版本发布历史如下:
2004年3月,Spring 1.0发布,支持以XML文件的方式配置Bean。
2006年10月,Spring 2.0发布,支持JDK 5,采用注解方式注入Bean。
2007年11月,更名为SpringSource,同时发布了Spring 2.5,支持JDK 6。
2009年12月,Spring 3.0发布,开始推荐Java的配置方式。
2013年12月,Spring 4.0发布,支持JDK 8,全面支持Java的配置方式。
2014年4月,Spring Boot 1.0.0发布。
2017年9月,Spring 5.0发布,支持JDK 9,新增Spring WebFlux特性。
在本书的编写过程中,Spring 5.3.x通用版已经发布,SpringBoot也发布了2.5.0通用版。
Spring的特性
Spring之所以流行并受到广大Java编程人员的追捧,究其原因是Spring具有以下5个关键特性。
1. 灵活
Spring框架具有灵活、可扩展及集成第三方包的特点,可以方便开发者构建各种应用。它以控制反转(IoC)和依赖注入(DI)为核心提供基础功能。无论是创建一个安全、响应式及基于云平台的微服务,还是创建一个复杂的数据流应用,Spring都有相应的框架。
2. 多产品化
Spring家族有多个产品:Spring MVC、Spring Boot、SpringCloud等。Spring MVC提供了Java Web的开发架构。Spring Boot改变了编程方式,结合应用的上下文和自动化配置,可以将其嵌入微服务开发中,还可以结合Spring Cloud组件,进行云服务开发。
3. 快速
Spring框架可以快速启动,快速关闭,快速执行。Spring 5可以执行异步非阻塞应用,让程序更高效。Spring Boot可以让开发者更容易搭建一个Java Web工程。启动一个Spring工程的时间可以达到秒级。
4. 安全
Spring代码贡献者与专业的安全人员会对Spring框架进行测试并修补报告的漏洞,第三方依赖包也会被监控并定期更新,以帮助开发者安全地保存数据。此外,Spring Security框架使开发者更容易集成标准的安全方案,并为开发者提供默认的安全解决方案。
5. 可支持的社区
Spring拥有庞大的、全球化的、积极的开源社区,无论开发者有什么问题,都可以在社区中获得支持。此外,Spring还提供了各种形式的文档和视频等资料供开发者参考。
Spring的体系结构
Spring是为了解决企业级应用程序开发而创建的。随着Spring的发展,Spring家族出现了多个产品线,包括Spring Framework、Spring Boot、Spring Cloud、Spring Data、Spring Integration、Spring Batch、Spring Security和Spring Cloud Data Flow等。本节主要介绍Spring Framework。
如图1.1所示,Spring Framework是一个分层框架,由多个模块组成,Spring的这些模块主要包括核心容器模块、数据访问和集成模块、Web模块、AOP(面向切面编程)模块、植入(Instrument)模块、消息传输(Messaging)模块和测试模块等,这些模块都构建在核心容器模块之上。
图1.1 Spring Framework分层架构图
1. 核心容器
核心容器(Core Container)模块提供了Spring框架的基本功能,分为Core(即spring-core)、Beans(即spring-beans)、Context(即spring-context)和Expression(即springexpression)4个子模块。Core和Beans是整个Spring框架的基础模块,也是Spring的控制反转与依赖注入的基本实现模块,Spring的其他模块依赖Core和Beans这两个模块。
spring-core:其他模块的核心,包含Spring框架的核心工具类,Spring的其他模块都要使用该包里的类。
spring-beans:核心模块,定义对Bean的支持,负责访问配置文件,以及创建和管理Bean,支持依赖注入和控制反转的相关操作。该模块有几个核心接口:BeanFactory接口、BeanDefinition接口和BeanPostProcessor接口。BeanFactory接口是工厂模式的具体实现,开发者无须自己编程去实现单例模式,它允许开发者把依赖关系的配置和描述从程序逻辑中解耦;BeanDefinition接口是对Bean的描述;BeanPostProcessor接口可以动态修改Bean的属性。
spring-context:上下文模块,是Spring运行时容器,提供对Spring的上下文支持,并提供一个框架式的对象访问方式,类似于一个JNDI注册表。Application-Context接口是该模块的关键,通过它可以方便、快捷地取出依赖注入的Bean。
ApplicationContext接口的实现类很多,如ClassPathXmlApplicationContext、FileSystemXmlApplicationContext和AnnotationConfigApplicationContext等。为了整合第三方库到Spring应用程序的上下文中,Spring还提供了spring-context-support模块。该模块提供了对高速缓存(EhCache和JCache)和调度(CommonJ和Quartz)的支持。
spring-expression:Spring的表达式语言,用以帮助Spring在运行时查询和操作对象。同时,该表达式还支持设置和获取对象的属性值及方法的调用,以及访问数组、集合和索引器的内容并支持查询和操作运行时对象,是对JSP 2.1规范中规定的统一表达式语言(Unified EL, UEL)的扩展。
2. Spring AOP模块
AOP模块是Spring框架的另一个核心模块,主要由AOP(即springaop)、Aspects(即spring-aspects)和Instrument(即springinstrument)3个子模块组成,提供面向切面的编程架构。
spring-aop:AOP的主要实现模块。以JVM的动态代理技术为基础,设计出一系列面向切面编程的实现,如前置通知、后置通知、环绕通知、返回通知和异常通知等。同时,以Pointcut接口来匹配切入点,可以使用现有的切入点来指定横切面,也可以扩展相关方法,再根据需求进行切入。
spring-aspects:集成自AspectJ框架,主要是为了给Spring AOP提供多种AOP实现方法。
spring-instrument:基于Java SE中的java.lang.instrument进行设计,可以看作AOP的一个支援模块。该模块的主要作用是在JVM启用时生成一个agent代理类,开发者通过这个agent代理类在运行时修改类的字节,从而改变一个类的功能,实现AOP的功能。
例如,spring-instrument-tomcat模块包含支持Tomcat的植入代理。
3. 数据访问和集成模块
数据访问和集成模块是由JDBC(即spring-jdbc)、ORM(即spring-orm)、OXM(即spring-oxm)、JMS(即spring-jms)和Transactions(即spring-transactions)5个子模块组成的。
spring-jdbc:主要提供JDBC的模板方法、关系型数据库的对象化方式、SimpleJdbc方式及事务管理来简化JDBC编程,它实现的类是JdbcTemplate、SimpleJdbcTemplate及NamedParameterJdbcTemplate。通过JdbcTemplate,消除了不必要的和烦琐的JDBC编码。
spring-orm:ORM框架支持模块,主要集成Hibernate、JavaPersistence API(JPA)和Java Data Objects(JDO),用于资源管理、数据访问对象(DAO)的实现和事务处理。
spring-oxm:主要提供一个抽象层以支撑OXM(Object to XMLMapping,提供一个支持对象或XML映射实现的抽象层,将Java对象映射成XML数据,或者将XML数据映射成Java对象),如JAXB、Castor、XMLBeans、JiBX和XStream等。
spring-jms:发送和接收信息的模块,自Spring 4.1以后,它还提供对spring-messaging模块的支持。
spring-transactions:事务控制实现模块。Spring框架对事务做了很好的封装,通过对该框架的AOP进行配置,可以将事务灵活地配置在任何一层,用以实现特殊接口和所有POJO(普通Java对象)的类编程和声明式事务管理。
4. Spring Web模块
Web模块建立在应用程序的上下文模块之上,为基于Web的应用程序提供上下文。该模块主要由Web(即spring-web)、WebMVC(即spring-webmvc)、WebSocket(即spring-websocket)和WebFlux(即spring-webflux)4个子模块组成。
spring-web:提供最基础的Web支持(如文件上传功能),以及初始化一个面向Web的应用程序上下文的IoC容器,同时也包含一些与Web相关的支持。
spring-webmvc:一个Web-Servlet模块,实现SpringMVC(Model-View-Controller)的Web应用。Spring的MVC框架让领域模型代码和Web表单之间能清晰地分离,并能与SpringFramework的其他功能集成。其中DispatchServlet是核心类,它完成对请求的处理与返回。
spring-websocket:基于WebSocket协议的Web实现。
spring-webflux:基于Reactor实现异步非阻塞的Web框架。
5. Messaging模块
Messaging(即spring-messaging)模块是从Spring 4开始新加入的,它的主要功能是为Spring框架集成一些基础的报文传送功能。
6. Test模块
Test(即spring-test)模块主要为应用测试提供支持,它集成了JUnit框架,可以对Spring组件进行单元测试和集成测试。
来源:大数据架构师