8.自动装配
自动配置原理分析自动配置原理
SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration
@EnableAutoConfiguration 作用 :
– 利用EnableAutoConfigurationImportSelector给容器中导入一些组件,导入了哪些组件呢?– 可以查看这个类selectImports()方法的内容,他返回了一个 autoConfigurationEntry , 来自 this.getAutoConfigurationEntry(autoConfigurationMetadata, annotationMetadata); 这个方法。我们继续跟踪;– 这个方法中有一个值 : List configurations =this.getCandidateConfigurations(annotationMetadata, attributes); 叫做获取候选的配置 , 我们点击去继续跟踪;
protected List<String> getCandidateConfiguration ...
7.properties多环境
多环境切换profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境;
方式一:多配置文件我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版本;
例如:application-test.properties 代表测试环境配置 application-dev.properties 代表开发环境配置
但是Springboot并不会直接启动这些配置文件,它默认使用application.properties主配置文件;
我们需要通过一个配置来选择需要激活的环境;
#比如在配置文件中指定使用dev环境,我们可以通过设置不同的端口号进行测试;
#我们启动SpringBoot,就可以看到已经切换到dev下的配置了;
spring.profiles.active=dev
方式二:yml的多文档块和properties配置文件中一样,但是使用yml去实现不需要创建多个配置文件,更加方便了
server:
port: 8081
#选择要激活那个环境块
spr ...
6.JSR303校验
JSR303数据校验三、JSR 303 基本的校验规则
空检查
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.
Booelan检查
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) Validates that the annotated string is between min and max included.
日期检查
@Past 验证 Date 和 Calendar 对象是否在当前时间之前,验证成立的话被注释的元素一定是一个过去的日期
@Future 验证 D ...
5.yaml配置文件
SpringBoot:配置文件及自动配置原理配置文件SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的
application.properties
语法结构 : key=value
application.yml
语法结构 :key:空格 value
配置文件的作用 :修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;
YAMLYAML是 “YAML Ain’t a Markup Language” (YAML不是一种置标语言)的递归缩写。
在开发的这种语言时,YAML 的意思其实是:”Yet Another Markup Language”(仍是一种置标语言)YAML A Markup Language :是一个标记语言YAML isnot Markup Language :不是一个标记语言
标记语言 以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,我们来对比下yaml和xml
yaml配置:
server:
prot: 8080
xml配置:
&l ...
4.启动
Run我最初以为就是运行了一个main方法,没想到却开启了一个服务;
@SpringBootApplication
public class SpringbootDemo02Application {
public static void main(String[] args) {
//该方法返回一个ConfigurableApplicationContext对象
//参数一:应用入口的类 参数类:命令行参数
SpringApplication.run(SpringbootDemo02Application.class, args);
}
}
SpringApplication.run分析
分析该方法主要分两部分,一部分是SpringApplication的实例化,二是run方法的执行;
SpringApplication
这个类主要做了以下四件事情
推断应用的类型是普通的项目还是Web项目
查找并加载所有可用初始化器 , 设置到initializers属性中
找出所 ...
3.运行原理
运行原理探究pom.xml
我们之前写的HelloSpringBoot,到底是怎么运行的呢,我们来看pom.xml文件
其中它主要是依赖一个父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
进入父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<v ...
2.什么是Spring
什么是SpringSpring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson 。
Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。
Spring是如何简化Java开发的
为了降低Java开发的复杂性,Spring采用了以下4种关键策略:
基于POJO的轻量级和最小侵入性编程;
通过IOC,依赖注入(DI)和面向接口实现松耦合;
基于切面(AOP)和惯例进行声明式编程;
通过切面和模版减少样式代码;
Spring Boot的主要优点:
为所有Spring开发者更快的入门
开箱即用,提供各种默认配置来简化项目配置
内嵌式容器简化Web项目
没有冗余代码生成和XML配置的要求
微服务什么是微服务?微服务是一种架构风格,它要求我们在开发一个应用的时候,这个应用必须构建成一系列小服务的组合;可以通过http的方式进行互通。要说微服务架构,先得说说过去我们的单体应用架构。
单体应用架构所谓单体应用架构(all in one)是指,我们将一个应用的中的所有应用服务都封装在一个应用中。无论是ERP、CRM或是其他什么系统, ...
1.微服务阶段
javase:OOPmysql:持久化html+css+js+jquery+框架:视图,框架不熟练,css不好javaweb:独立开发MVC三层架构的网站了:原始ssm:框架:简化了我们的开发流程,配置也开始复杂了
war:tomcat运行
spring再简化:SpringBoot - jar:内嵌tomcat; 微服务架构!
服务越来越多:springcloud
14.声明式事务
1.回顾事务
把一组业务当成一个业务来做;要么都成功,要么都失败!
事务在业务开发中,十分的重要,涉及到数据的一致性问题,不能马虎!
确保完整性和一致性
加粗样式事务ACID原则
原子性
一致性
隔离性
多个业务可能操作同一个资源,防止数据损坏
持久性
事务一旦提交无论系统发生什么问题,结果都不会再被影响,被持久化的写到存储器中!
2.spring中的事务管理
声明式事务:AOP
编程式事务:需要再代码中,进行事务的管理
思考:
为什么需要事务
如果不配置事务,可能存在数据提交不一致的情况
如果我们不在SPRING中去配置声明式事务,我们就需要在代码中手动配置事务!
事务在项目中的开发十分重要,设计到数据的一致性和完整性问题,不容马虎!
13.整合Mybatis
1.步骤
导入相关的jar包a. junitb. mybatisc.mysql数据库d. spring相关的e. aop织入f. mybatis-spring【new】
编写配置文件
测试
2.回忆mybatis
编写实体类
编写核心配置文件
编写接口
编写Mapper.xml
测试
3.Mybatis-spring
编写数据源配置
sqlSessionFactory
sqlSessionTemplate
需要给接口加实现类
将自己写的实现类,注入到Spring中,
测试使用即可