第 1 章 SpringBoot
的来临
1.1 Spring
的历史
在Spring
框架没有开发出来时,JavaEE
是以Sun
公司所制定的EJB
(Enterprise Java Bean)作为标准的。
然后在2004
年由RodJohnson
主导的Spring
项目推出了1.0
版本,这彻底地改变了JavaEE
开发的世界,很快人们就抛弃了繁重的EJB
的标准,迅速地投入到了Spring
框架中, 于是Spring
成为了现实中JavaEE
开发的标准。Spring
以强大的控制反转(loC
)来管理各类Java
资源,从而降低了各种资源的藕合;并且提供了极低的侵入性,也就是使用Spring
框架开发的编码,脱离了Spring
也可以继续使用;而Spring
的面向切面的编程(AOP
)通过动态代理技术,允许我们按照约定进行配置编程,进而增强了Bean
的功能,它擦除了大量重复的代码使得开发人员能够更加集中精力于业务开发;Spring
还提供许多整合了当时非常流行的框架的模板,如持久层Hibernate
的HibernateTemplate
模板、IBATIS
的SqlMapClientTemplate
模板等, 极大地融合并简化了当时主流技术的使用, 使得其展示了强有力的生命力, 并延续至今。
1.2 注解还是XML
只是在Spring
早期的l.x
版本中,由于当时的JDK
并不能支持注解,因此只能使用XML
。而很快随着JDK
升级到JDK5
,它加入了注解的新特性,这样注解就被广泛地使用起来,于是Spring
的内部也分为了两派,一派是使用XML 的赞同派,一派是使用注解的赞同派。
为了简化开发,在Spring2.x
之后的版本也引入了注解,不过只是少量的注解,如@Component
、@Service
等,但是功能还不够强大,因此对于Spring
的开发,绝大部分的情况下还是以使用XML
为主, 注解为辅。
到了Spring 3.0
后,引入了更多的注解功能,于是在Spring
中产生了这样一个很大的分歧,即是使用注解还是使用XML?对XML
的引入,有些人觉得过于繁复,而对于注解的使用,会使得注解分布得到处都是,难以控制,有时候还需要了解很多框架的内部实现才能准确使用注解开发所需的功能。这个时候大家形成了这样的一个不成文的共识,对于业务类使用注解,例如,对于MVC
开发,控制器使用@Controller
,业务层使用@Service
,持久层使用@Repository
;而对于一些公用的Bean
,例如,对于数据库(如Redis
)、第三方资源等则使用XML
进行配置,直至今时今日这样的配置方式还在企业中广泛地使用着。也许使用注解还是XML
是一个长期存在的话题,但是无论如何都有道理。
随着注解的功能增强,尤其是Servlet 3.0
规范的提出,Web
容器可以脱离web.xml
的部署,使得Web
容器完全可以基于注解开发,对于Spring 3.x
和Spring 4.x
的版本注解功能越来越强大,对于XML
的依赖越来越少,到了4.x
的版本后甚至可以完全脱离XML
,因此在Spring
中使用注解开发占据了主流的地位。与此同时,Pivotal
团队在原有Spring
的基础上主要通过注解的方式继续简化了Spring
框架的开发,它们基于Spring
框架开发了Spring Boot
,所以Spring Boot
并非是代替Spring
框架,而是让Spring
框架更加容易得到快速的使用。Pivotal
团队在2014年推出Spring Boot
的1.0
版本,该版本使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。在2018年3月SpringBoot
推出了2.0.0 GA
版本,该版本是基于Spring5
的,并引入其最新的功能,能够有效支持Java 9
的开发。Spring Boot
致力于在蓬勃发展的快速应用开发领域(rapid application development)借助Java EE
在企业互联网的强势地位成为业界领导者,它也是近年来Java
开发最令人感到惊喜的项目之一。
1.3 SpringBoot
的优点
SpringBoot
的优点
- 创建独立的
Spring
应用程序 - 嵌入的
Tomcat
、Jetty
或者Undertow
,无须部署WAR
文件 - 允许通过
Maven
来根据需要获取starter
- 尽可能地自动配置
Spring
- 提供生产就绪型功能,如指标、健康检查和外部配置
- 绝对没有代码生成,对
XML
没有要求配置
约定优于配置,这是SpringBoot
的主导思想。对于SpringBoot
而言,大部分情况下存在默认配置,你甚至可以在没有任何定义的情况下使用Spring
框架,如果需要自定义也只需要在配置文件配置一些属性便可以,十分便捷。而对于部署这些项目必需的功能,SpringBoot
提供starter
的依赖,如spring-boot-starter-web
捆绑了SpringMVC
所依赖的包,spring-boot-starter-tomcat
绑定了内嵌的Tomcat
,这样使得开发者能够尽可能快地搭建开发环境,快速进行开发和部署,这就是SpringBoot
的特色。
1.4 传统SpringMVC
和SpringBoot
的对比
与传统的SpringMVC
对比,SpringBoot
允许直接进行开发,这就是它的优势。在传统所需要配置的地方, SpringBoot
都进行了约定,也就是你可以直接以SpringBoot
约定的方式进行开发和运行你的项目。当你需要修改配置的时候,它也提供了一些快速配置的约定,犹如它所承诺的那样,尽可能地配置好Spring
项目和绑定对应的服务器,使得开发人员的配置更少,更加直接地开发项目。对于那些微服务而言,更喜欢的就是这样能够快速搭建环境的项目,而SpringBoot
提供了这种可能性,同时SpringBoot
还提供了监控的功能,随着云技术的
到来,微服务成了市场的热点,于是代表Java
微服务时代的SpringBoot
微服务开发的时代己经到来,结合SpringCloud
后它还能很方便地构建分布式系统开发,满足大部分无能力单独开发分布式架构的企业所需,所以这无疑是激动人心的技术。