第一章 初始Springboot
Springboot的由来,Spring、SpringMvc的技术发展趋势,Spring Framework的体系结构,Spring社区。
J2EE出现在1998年(参见https://zh.wikipedia.org/wiki/Java_EE),全称Java 2 Platform Enterprise Edition,它是由SUN公司领导、各厂家共同制定的工业标准,或者说,它是在SUN公司领导下,多家公司参与共同制定的企业级分布式应用程序开发规范。由于Java的版本迭代,J2EE名称也要做相应变更,因此2006年,java6.0发布后,J2EE改名为 JavaEE,JavaEE即Java企业版。2022年,开发还在使用的JavaEE组件主要有Java Servlet、Java API for RESTful Web Services (JAX-RS)、Java Persistence、Java Transaction API (JTA) 等。更多信息
JavaEE规范固然先进、完善,但整个框架臃肿、低效、脱离现实,这种低效一方面体现在代码开发上,另一方面也体现在JavaEE发布的年代,计算机算力普遍不高,程序执行效率低,实际这也是JVM虚拟机的固有缺陷,直到2022年GraalVM的发布,才有官方层面提升了代码执行效率。
基于上述原因,Rod Johnson在2002年启动了轻量级容器框架Spring的开发。他从实际需求触发,提出了轻便、灵巧,易于开发、测试和部署等特性,通过不断丰富内涵,于2004年3月24日,发布了1.0正式版。随着Spring 1.0的发布,同年又推出了一部堪称经典的力作《Expert one-on-one J2EE Development without EJB》,该书在Java世界掀起了轩然大波,不断改变着当年的Java开发者程序设计和开发的思考方式。在该书中,作者根据自己多年丰富的实践经验,对EJB的各种笨重臃肿的结构进行了逐一的分析和否定,并分别以简洁实用的方式替换之。至此Spring一战功成,Rod Johnson也必将成为一个改变Java世界的大师级人物。
Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合。
spring 1.0刚发布时,应用开发还以传统模式为主,一个系统往往时一个单体架构的服务,所有模块糅合在一起。最初的Spring往往和Struct、Hibernate搭配使用,即J2EE SSH开发框架,这时的Spring往往使用xml配置bean和bean的properties。
spring 2.5发布后,开始支持Java1.6、Java EE5,Java1.6引入了注解,spring2.5基于java注解开发了通过注解配置bean和bean注入的方案。
spring虽然提供了xml配置、java注解配置多种方式来进行bean的配置和依赖的注入,但一些常用组件如数据库、MQ的配置仍然相当繁琐。
对于新手来说,Java EE应用开发的入门门槛仍然很高。
2014年4月SpringBoot 1.0正式发布,Spring Framework 4.0也随之一起发布,Boot即Bootloader,SpringBoot即Spring引导器,通过SpringBoot可以方便的创建Java EE应用。
SpringBoot 2.0发布于2018年,带来了对OpenJDK1.8的支持,Spring Framework 5.0也随之一起发布,此外,还有一些组件的常规升级。除此之外没有太大变化。
伴随着数据规模的急速增长,海量请求的涌入,单体架构已经无法满足高并发、高可用的应用场景,服务开始从单体架构向无状态微服务架构转变。springcloud与2016年推出第一个版本,springcloud提供了服务注册发现、服务降级熔断、服务网关、负载均衡、RPC调用的能力,帮助应用开发者快速开发微服务架构的应用。
一直以来,Java打包的字节码程序的启动速度和内存占用都为人诟病,Oracle等一批大厂也在着力解决这个问题。终于,在2022年Oracle推出了GraalVM,GraalVM通过AoT技术将java代码编译为平台原生的二进制程序,基于该技术生成的二进制程序的启动速度和内存占用都有大幅改善。
SpringBoot 3.0发布带来了对GraalVM的支持。
用spring framework官方文档的一张图来呈现spring的体系结构。
spring framework是灵活的,引入不通的模块可搭建不同需求的应用,满足用户不同的应用场景。
Core、Beans模块提供了最基础的部分功能,包括IoC和DI特性。
Context模块建立在Core、Beans之上,Context模块的spring-context提供了一种类似于JNDI注册器的框架式的对象访问方法。它继承了Beans的特性,并额外提供了国际化支持、事件传播、资源加载、Context透明创建,同时,它提供了一个Servlet容器。此外,它还支持一些Java EE的特性,诸如EJB,JMX,远程调用。ApplicationContext接口是Context模块的关键所在。Context模块的spring-context-support提供了集成第三方库到ApplicationContext的支持,诸如caching(EhCache,Guava,JCache),mailing(JavaMail),scheduling(CommonJ,Quartz)和模板引擎(FreeMarker,JasperReports,Velocity)。
SpEL模块提供了一个功能强大的表达式语言,用来查询和控制一个运行时对象。
AOP模块的spring-aop提供一个标准的面向切面编程的实现,通过AOP模块可以方便的定义方法拦截器和切点,以干净利索的分离业务代码。AOP模块的spring-aspects提供了AspectJ的集成。
Instrumentation模块的spring-instrument提供类检测支持和类加载器实现,Instrumentation模块的spring-instrument-tomcat模块包含spring的tomcat检测代理。
Message模块包含Spring Integration项目的关键抽象,诸如Message,MessageChannel,MessageHandler等。此外,它还包括一组用于方法上的消息映射注解,类似于Spring MVC的基础注解。
Data Access/Integration由JDBC,ORM,OXM,JMS和Transaction组成。
Data Access/Integration模块的spring-jdbc提供了JDBC抽象层,它消除了需要针对特定数据库供应商的错误代码进行冗长的JDBC编码和解析。
Data Access/Integration模块的spring-tx提供了对实现特殊接口的类和所有POJO的编程式和声明式事务管理。
Data Access/Integration模块的spring-orm提供了流行的对象关系映射APIs,包括JPA,JDO和Hibernate。结合声明书事务使用十分方便。
Data Access/Integration模块的spring-oxm提供了对象XML映射的抽象层,它的实现包括JAXB,Castor,XMLBeans,JiBX和XStream。
Data Access/Integration模块的spring-jms包括生产和消费消息特性,从Spring Framework 4.1开始提供spring-messaging的集成。
Web模块的spring-web提供基础的面向web集成特性,诸如文件上传功能、使用Servlet监听器初始化Ioc容器,面向web的ApplicationContext。此外,它还包括一个HTTP客户端和面向web部分的Spring远程支持。
Web模块的spring-webmvc也称为Web-Servlet模块,它包括Spring的Model-view-controller(MVC),针对web应用的REST Web Services实现。Spring MVC框架在域模型和web表单之间提供了一个清晰的分离,并能够与Spring Framework的所有其他功能集成。
Web模块的spring-websocket提供了websocket支持,可以通过注解开启一个websocket服务端。
Web模块的spring-webmvc-portlet也称为Web-Portlet模块,它提供了在Portlet环境种使用的MVC实现,类似于基于Servlet的spring-webmvc的功能。
Test模块支持使用JUnit对spring组件进行单元测试和继承测试。它提供了Spring ApplicationContext的一致性加载和这些上下文的缓存,它还提供了mock对象。
Spring 拥有强大的开源社区,它的代码开源在Github,你可以方便的获取到Spring项目的源代码。spring-framework项目在Github拥有超过50K的Star,贡献代码的工程师超过700人,足见Spring社区非常活跃。一个的开源社区的活跃程度决定了这个项目的发展前景和空间,Spring社区的广泛活跃注定了Spring在未来的巨大发展前景。
SpringDoc是一款可以结合SpringBoot使用的API文档生成工具,基于OpenAPI3,用于取代SpringFox。它支持Spring WebMVC和Spring WebFlux,目前正在蓬勃发展种。
提示:这里对文章进行总结:
本文简单介绍了spring的历史和发展趋势,spring framework的体系结构,让读者对Spring的由来和组成由一个简单的了解。
上一篇:软考集成项目中级考几门
下一篇:回溯算法9:分割回文串