Spring Boot 学习笔记(一)——入门
第1章 入门
1.1 Spring风云再起
Spring诞生时是J2EE的轻量级替代品。
Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入(DI)和面向切面编程(AOP),用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能。
虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显示配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构的配置方式,可以替代XML。
尽管如此,我们依旧需要很多配置。开启某些Spring特性时,比如事务管理和Spring MVC,还是需要用XML或Java进行显示配置。启用第三方库时也需要显示配置,比如基于Thymeleaf的Web视图。配置Servlet和过滤器(比如Spring的DispatcherServlet)同样需要在web.xml或Servlet初始化代码里进行显示配置。
除此之外,项目的依赖管理也是件吃力不讨好的事情。决定项目里要用哪些库就已经够让人头痛了,你还要知道这些库的哪个版本和其他库不会有冲突。一旦选错了依赖的版本,随之而来的兼容问题毫无疑问是生产力杀手。
Spring Boot让这一切成为了过去。
1.1.1 重新认识Spring
用Spring开发一个简单的Hello World Web应用程序,需要以下东西:
- 添加依赖:一个项目结构,包含必要的依赖的Maven或者Gradle构建文件,至少要有Spring MVC和Servlet API这些依赖。
- web.xml配置:一个web.xml文件(或者一个WebApplicationInitializer实现),其中声明了Spring的DispatcherServlet。
- Spring配置:一个启用了Spring MVC的Spring配置。
- 控制器类:一个用来响应HTTP请求的控制器类。
- Web应用服务器:用于部署应用程序的Web应用服务器,比如Tomcat。
以上5点中,只有控制器类是和Hello World功能相关的,剩下的都是Spring开发的Web应用程序必需的通用样板。
通过Spring Boot开发,Spring Boot会搞定执行应用程序所需的各种后勤工作(依赖、web.xml配置、Spring配置和Web应用服务器),开发人员只需要写和业务相关的应用程序代码。
1.1.2 Spring Boot 精要
Spring Boot最重要的是以下四个核心:
-
自动配置:针对很多Spring应用程序中常见的应用功能(DataSource、JdbcTemplate等等),Spring Boot能够自动提供相关配置。基于Spring 4.0中的条件化注解@Conditional。
-
起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。在这之前,项目需要添加库,需要知道Group和Artifact,应该用哪个版本,不同版本会不会和其他依赖发生冲突。Spring Boot通过起步依赖为项目的依赖管理提供帮助。起步依赖其实就是特殊的Maven和Gradle依赖,利用了传递依赖解析,把常用库聚合在一起,组成了几个为特定功能而定制的依赖。
举个例子,假设你正在用Spring MVC构造一个REST API,并将JSON作为资源表述,此外你还想运用遵循JSR-303规范声明式校验,并使用嵌入式的Tomcat服务器来提供服务,要实现以上目标,需要在Maven或Gradle里至少配置以下8个依赖:
- org.springframework:spring-core
- org.springframework:spring-web
- org.springframework:spring-webmvc
- com.fasterxml.jackson.core:Jackson-databind
- org.hibernate:hibernate-validator
- org.apache.tomcat.embed:tomcat-embed-core
- org.apache.tomcat.embed:tomcat-embed-el
- org.apache.tomcat.embed:tomcat-embed-logging-juli
如果利用Spring Boot的起步依赖,只需要添加Spring Boot的Web起步依赖(org.springframework.boot:spring-boot-starter-web),它会根据依赖传递把其他所需依赖引入项目中。起步依赖基本都以spring-boot-starter开头,随后是直接代表功能的名字,比如web、test等。 -
命令行界面:这是Spring Boot的可选特性,借此你只需要写代码就能完成完整的应用程序,无需传统项目构建。
Spring Boot CLI利用了起步依赖和自动配置,让开发人员专注于代码本身。
CLI能够检测到代码中使用了哪些类,他知道要向Classpath中添加哪些起步依赖才能让它运行起来,一旦那些依赖出现在Classpath中,一系列自动配置就会接踵而来,确保启用代码需要的功能。 -
Actuator:让你能够深入运行中的Spring Boot应用程序,一探究竟。它提供了很多>生产级的特性,诸如监控、查看配置明细、运行时度量等等。它提供了在运行时检视应用程序内部情况的能力,包括以下细节:
1.Spring应用程序上下文里配置的Bean。
2.Spring Boot的自动配置做的决策。
3.应用程序取到的环境变量、系统属性、配置属性和命令行参数。
4.应用程序里线程的当前状态。
5.应用程序最近处理过的HTTP请求的跟踪情况。
6.各种和内存用量、垃圾回收、Web请求以及数据源用量相关的指标。
1.1.3 Spring Boot 不是什么
- Spring Boot不是应用服务器。Spring Boot可以把Web应用程序构建为可自执行的JAR文件,不用部署到传统Java应用服务器里就能够在命令行里运行,Spring Boot在应用程序里嵌入了一个Servlet容器(Tomcat、Jetty或Undertow),以此实现这一功能,但这是内嵌的Servlet容器提供的功能,不是Spring Boot实现的。
- Spring Boot没有实现诸如JPA或JMS之类的企业级规范。它只是在自动配置中完成了某些企业级特性的Bean。
- Spring Boot没有引入任何形式的代码生成。它只是利用了Spring 4的条件化配置特性(@Conditional注解)。
1.2 Spring Boot 入门
1.2.1 安装Spring Boot CLI
略
1.2.2 使用Spring Initializr 初始化Spring Boot 项目
- 通过Web界面使用,打开浏览器访问https://start.spring.io
- 通过Spring Tool Suite使用,这是Eclipse的一个插件,增加了许多辅助Spring开发的特性,可以从http://spring.io/tools/sts 下载。
- 通过Intellij IDEA使用。Intellij IDEA 14.1已经支持Spring Boot了,之前的版本可以在File->Settings->Plugins->Brower responsitories…中搜索Spring Assistant并下载安装该插件。
- 在Spring Boot CLI里使用Initializr。