[有书共读16]Spring Boot 2:第一章
第一章
Spring 简介
- Java EE平台特点
- 稳定性能
- 良好的开放性
- 严格的安全性
- Java EE应用行业
- 对于信息化要求较高
- 典型行业:银行、电信、证券、电子商务
- 敲重点:学好java去应聘这些类型的公司的IT部门啊
- Java EE和Spring的关系
Java EE标准是一个接口。Spring是一个应用最广泛的实现。
graph LR A[Java EE]--实际意义上的标准其实就是-->B[Spring];
- Spring框架体系
graph LR A((Spring))-->B[Spring Boot]; A-->C[Spring Cloud]; C-->D[Spring Cloud Data Flow]; A-->E[Spring Web Flow]; A-->F[Spring Security]; A-->G[Spring for Android]; A-->H[...]
- 凭什么成为Java EE标准中的老大?Spring框架的优点:
- 低侵入式设计,代码的污染极低。
- 独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once ,Run Anywhere的承诺。
- Spring的IoC窗口降低了业务对象替换的复杂性,提高了组件之间的解耦。
- Spring的AOP支持允许将一些通用任务如:安全、事务、日志等进行集中式处理,从而提供了更好的利用性。
- Spring的ORM提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。
- Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。
- Spring框架组成
- 核心容器(Core Container)
- Spring-Core:核心工具类,Spring其他模块大量使用Spring-Core;
- Spring-Beans:Spring定义Bean的支持;
- Spring-Context:运行时Spring容器;
- Spring-Context-Support:Spring容器对第三方包的集成支持;
- Spring-Expression:使用表达式语言在运行时查询和操作对象;
- AOP
- Spring-AOP:基于***的AOP支持;
- Spring-Aspects:基于AspectJ的AOP支持;
- 消息(Messaging)
- spring-Messaging:对消息架构和协议的支持。
- Web
- Spring-Web:提供基础的Web集成的功能,在Web项目中提供Spring的容器;
- Spring-WebMVC:提供基于Servlet的Spring MVC;
- Spring-WebSocket:提供WebSocket功能;
- Spring-WebMVC-Portlet:提供Portlet环境支持;
- 数据访问/集成(Data Access/Integration)
- Spring-JDBC:提供以JDBC访问数据库的支持;
- Spring-TX:提供编程式和声明式的事务支持;
- Spring-ORM:提供对对象/关系映射技术的支持;
- Spring-OXM:提供对对象/XML映射技术的支持;
- Spring-JMS:提供对JMS的支持;
- 核心容器(Core Container)
-
Spring生态圈
- Spring Boot:使用默认开发配置来实现快速开发。
- Spring XD:用来简化大数据应用开发。
- Spring Cloud:为分布式系统开发提供工具集。
- Spring Data:对主流的关系型和NoSQL数据库的支持。
- Spring Integration:通过消息机制对企业集成模式(EIP)的支持。注:企业信息门户EIP(Enterprise Information Portal)
- Spring Batch:简化及优化大量数据的批处理操作。
- Spring Security:通过认证和授权保护应用。
- Spring HATEOAS:基于HATEOAS原则简化REST服务开发。 (注:“超文本驱动”又名“将超媒体作为应用状态的引擎”(Hypermedia As The Engine Of Application State,来自Fielding博士论文中的一句话,缩写为HATEOAS。 http://www.infoq.com/cn/articles/understanding-restful-style/)
- Spring Social:与社交网络API(如Facebook、新浪微博等)的集成。
- Spring AMQP:对基于AMQP的消息的支持。
注:AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计,如RabbitMQ等。 - Spring Mobile:提供对手机设置检测的功能,给不同的设置返回不同的页面的支持。
- Spring for Android:主要提供在Android上消费RESTful API的功能。
- Spring Web Flow:基于Spring MVC提供基于向导流程式的Web应用开发。
- Spring Web Services:提供了基于协议有限的SOAP/WEB服务。
- Spring LDAP:简化使用LDAP开发。注:LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。
-
Spring Session:提供一个API及实现来管理用户会话信息。
Spring Boot 简介
-
解决问题:使用约定优先于配置(COC,Convention Over Configuration)的理念来解决Spring框架配置过多的问题。
- Spring Boot优点
- 使编码变得简单:推荐使用注解
- 使配置变得简单:自动配置、快速构建项目、快速集成新技术的能力
- 使部署变得简单:内嵌Tomcat、Jetty等Web容器
- 使监控变得简单:自带项目监控。
- Spring Boot的主要特征
- (1)遵循“习惯优于配置”的原则,使用Spring Boot只需要很少的配置,大部分的时候我们直接使用默认的配置即可;
- (2)项目快速搭建,可以无需配置的自动整合第三方的框架;
- (3)可以完全不使用XML配置文件,只需要自动配置和Java Config;
- (4)内嵌Servlet容器,降低了对环境的要求,可以使用命令直接执行项目,应用可用jar包执行:java -jar;
- (5)提供了starter POM, 能够非常方便的进行包管理, 很大程度上减少了jar hell或者dependency hell;
- (6)运行中应用状态的监控;
- (7)对主流开发框架的无配置集成;
- (8)与云计算的天然继承;
- Spring Boot Starter
- 打开SPRING INITIALIZR
- 单击【Switch to the full version】
- 会看到大约80个左右的自动配置依赖模块
- 所有的spring-boot-starter模块都有约定的默认配置,但是允许开发者调整这些默认的配置用以改变默认的配置行为
- Spring Boot的配置主要可以分为以下几类,其中优先级从高到底
- 命令行参数
- 系统环境变量
- 位于文件系统中的配置文件
- 位于classpath中的配置文件
- 固化到代码中的配置
- 实际项目开发中最常用的配置是配置文件,Spring Boot应用默认的配置文件名叫作application.properties
-
日志依赖模块spring-boot-starter-logging
-
java的日志系统多种多样,可以通过如下配置在Maven中添加spring-boot-starter-logging依赖模块```
org.springframework.boot spring-boot-starter-logging
* Spring Boot使用logback作为应用日志的框架,要想改变springBoot提供的应用日志设定,通过以下原则 * 遵循logback的约定,使用自己定制的logback.xml日志文件 * logback.xm日志文件建议放在src/main/resources目录下,然后在application.properties中指定
logging.config=logback.xml ```
-
-
Web开发依赖模块spring-boot-starter-web
-
为了帮助开发者简化快速搭建过程并开发Web项目,Spring Boot提供了spring-boot-starter-web自动配置依赖模块```
org.springframework.boot spring-boot-starter-web
```
- 在当下项目运行mvn spring-boot:run就可以直接启用一个嵌套了tomcat的web应用。
如果没有提供任何服务的Cotroller,访问任何路径都会返回一个springBoot默认的错误页面(Whitelabel error page)。 -
Spring Boot使用spring-boot-starter依赖模块开发Web项目,非常方便,简单,但是想要更好的使用spring-boot-starter-web依赖模块,还需要充分了解一些“约定”
- 项目结构层面的约定
- Spring MVC框架层面的约定
-
嵌入式Web容器层面的约定
下载和安装Maven
-
-
下载和安装Maven请按如下步骤
- 登陆(http://maven/apache/org/download.cgi)站点下载Maven最新版站点下载Maven最新版)
- 将下载到的压缩文件加压缩到任意路径,此处将其解压缩到D:\路径下,解压缩后生成文件夹apache-maven-3.5.0
-
配置Maven本地资源库
-
在apache-maven-3.5.0文件夹下新建文件夹repository,用于充当本地资源库。打开apache-maven-3.5.0\conf\setting.xml文件,在元素下增加D:/apache-maven-3.5.0/repository
Eclipse 集成Maven
-
-
打开Eclipse,选择Window→Preferences→Maven→User Settings
- Global Settings:全局设置,此处选择Maven的conf目录下的settings.xml
- User Settings:用户设置,此处选择Maven的conf目录下的settings.xml
-
Local Repository:Maven的本地资源库,即创建的repository目录。
Eclipse构建基于Maven和Spring Boot的项目
-
创建一个新的Maven项目
- 打开Eclipse,选择File→New→Others→Maven→Maven Project
-
Maven项目结构
-
编写测试代码
- 写一个简单的java类HelloController```
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController;
public class HelloController{
public String hello(){return "Hello Spring Boot!";
}
}
``` - 修改Maven默认的App类```
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
public class App{
public static void main(String[] args){SpringApplication.run(App.class,args);
}
}
``` - 启动Spring Boot项目
- 使用右键快捷菜单运行main方法。
- 写一个简单的java类HelloController```
Spring和Spring Boot
Spring
Spring框架是一个轻量级的企业级开发一站式解决方案。该解决方案包括:
- 基于依赖注入的核心机制
- 基于AOP(面向切面编程)的声明式事务管理
- 多种持久层技术的整合
-
优秀的Web MVC框架
Spring框架是从实际开发中抽取出来的,因此完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的效率。Spring贯穿表现层、业务层、持久层,并能以高度开发性与已有的框架无缝整合。总结起来,Spring有如下优点:
-
低侵入式设计,代码的污染极低
- 独立与各种应用服务器,应用可以真正实现Write Once,Run Anywhere的承诺。
- IoC(控制反转)降低了业务对象替换的复杂度,提高组件之间的耦合度。
- AOP支持允许将一些通用任务如安全、事务、日志等进行集中式处理,提供了更好的复用性。
- ORM(对象关系映射)提供了与第三方持久层框架的良好整合,简化了底层的数据库访问。
- 高度开放性,不强制应用依赖与Spring,开发者自由选择部分或者全部。
模块化的Spring可供开发者自己选择需要的模块,其中Spring Core Container(即核心容器)是使用Spring框架时必要的,它代表了Spring框架的核心机制,由org.springframework.core、org.springframework.beans、org.springframework.context和org.springframework.expression四个包及其子包组成。
Spring Boot
Spring发展到今天衍生出了一系列框架,其中本书的主角Spring Boot就是其中之一。说了太多的Spring的优点,但在实际项目开发中会遇到一个最让人的问题,就是配置过多,需要大量的配置文件。Spring Boot的出现解决了这一问题。
Spring Boot采用“约定优先与配置”的理念设计了很多基于“开箱即用”的spring-boot-starter自动配置依赖模块。所有的模块都有约定的默认配置,但允许开发者进行调整。配置主要有以下几类(优先级:1->5):
- 命令行参数
- 系统环境变量
- 位于文件系统中的配置文件
- 位于classpath中的配置文件
- 固化到代码中的配置
高优先级方式提供的配置项会覆盖或者优先生效。
约定又有下面这些:
1、项目结构层面的约定 。Spring Boot项目的静态文件和页面统一放在src/main/resources目录对应的子目录下。
2、Spring MVC框架层面的约定。spring-boot-starter-web依赖模块默认自动配置了一些MVC组件如:ViewResolver(视图解析器)、Converter和Formatter(转换器)、HttpMessageConverter、MessageCodesResolver
3、嵌入式Web容器层面的约定。默认使用嵌入式Tomcat,8080端口。