第一部分 Spring 基础
第一章 Spring起步
唯一的不变就是变化,Spring框架新的关注点包括:
1、微服务。
2、反应式编程。
3、Spring Boot。
什么是Spring?
组件
任何实际的应用程序都是由很多组件组成的。每个组件负责整个应用功能的一部分。这些组件需要与其它的应用元素进行协调以完成自己的任务。当应用程序运行时,需要以某种方式创建并引入这些组件。在Spring中,这些组件可以称为Bean。
容器
Spring的核心是提供了一个容器(container),通常称为Spring应用上下文(Spring Application Context),它们会创建和管理这些组件。
依赖注入
Spring通过依赖注入DI(Dependency Injection)的模式,借助于自动装配autowiring和组件扫描component scanning,将Bean装配在一起。组件扫描技术使得Spring能够自动发现应用类路径下的组件,并将它们创建成Spring应用上下文中的bean。通过自动装配技术,Spring能够自动为组件注入它们所依赖的其它bean。
Spring Boot
Spring Boot是Spring框架的扩展,通过自动配置autoconfiguration,大幅度减少了构建应用所需要的显示配置的数量,极大的改善了Spring的开发。
初始化Spring应用
Spring Initializr是一个基于浏览器的web 应用,同时也是一个REST API,能够生成一个Spring项目结构的骨架。使用它的方式包括:
1、通过https://start.spring.io/的web应用。
2、在命令行中使用curl命令
3、在命令行中使用SpringBoot命令行接口,Spring Boot CLI。
4、在IDE,例如Spring Tool Suite,IntelliJ IDEA,NetBeans中创建新项目。
Spring Initializr默认使用具有JAR的打包方式,这是基于云思维做出的选择。
spring-boot- maven-plugin
这个插件提供了一些重要功能:
1、提供了一个maven goal。
2、确保依赖的所有库在运行时类路径下是可用的,并且都包含在可执行的JAR文件中。
3、在JAR中生成一个manifest文件,将引导类声明为可执行JAR的主类。
编写Spring应用
Spring MVC
Spring MVC是Spring自带的Web框架,它的核心是控制器controller的理念。控制器是处理请求,并以某种方式进行信息响应的类。
Spring Boot Dev Tools
Dev Tools 提供了一些开发期的工具,包括:
1、代码变更后自动重启。
2、浏览器自动刷新。
3、自动禁用模版缓存。
4、内置H2控制台。
第二章 开发Web应用
在SpringWeb引用中,获取和处理数据是控制器的任务,将数据渲染到HTML中并在浏览器中展现是视图的任务。
展现信息
创建Web应用的步骤:
1、构建领域类,即实体。
2、创建控制器类。
3、设计视图:JSP,Thymeleaf,FreeMarker,Mustache、Groovy的模板。静态内容要放在/static目录下。
处理表单提交
校验表单输入
Spring支持Java的Bean Validation API,也被称为JSR-303。
第三章 使用数据
使用JDBC读取和写入数据
Spring对JDBC的支持要归功于JdbcTemplate类。
可以将表结构创建语句schema.sql,数据文件data.sql文件放在src/main/resources文件夹下,Spring boot会自动加载。
使用JPA读取和写入数据
Spring Data包含多个子项目。Spring Data JPA基于关系型数据库进行JPA持久化。
DSL
Spring Data定义了一组小型的领域特定语言Domain-Specific Language,通过方法签名来定义查询,但复杂的查询还是建议使用@Query注解来实现。
第四章 保护Spring
启用Spring Security
只需要将Spring Security添加到项目的构建文件中,我们就得到了以下特性:
1、所有的HTTP请求路径都需要认证
2、不需要特定的角色和权限
3、没有登录页面。
4、认证过程是通过HTTP basic认证对话框实现的。
5、系统只有一个用户,用户名为user。
Spring Security配置
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuiler auth){
}
@Override
protected void configure(HttpSecurity http) throw Exception{
//web级别安全性定义
//1、配置自定义的登录页面。
// 2、预防跨站请求伪造。
// 3、支持用户退出应用。
}
}
已经认证的用户信息可以通过SecurityContext对象来获取。
第五章 使用配置属性
Spring有两种不同的配置:
1、Bean装配。
2、属性注入。Spring的环境抽象是各种配置属性的一站式服务。Spring环境会拉去多个属性源,例如JVM系统属性,操作系统环境变量属性,命令行参数,应用属性配置文件,并将其聚合到一个源,然后注入到Spring的bean中。
默认情况下,Spring Boot通过Logback配置日志。
Spring提供了@ConfigurationProperties注解来支持配置属性的注入,还可以使用profile进行配置。