Spring boot 配置优先级,bean管理,SpringBoot原理,起步依赖,自动配置,组件扫描,SSM 使用 总结
Spring boot 原理 总结
一。 配置优先级
01.properties、yaml、yml三种配置文件,优先级最高的是properties
配置文件优先级排名(从高到低):
- properties配置文件
- yml配置文件
- yaml配置文件
02.除了以上3种配置文件外,SpringBoot为了增强程序的扩展性,除了支持配置
文件的配置方式以外,还支持另外两种常见的配置方式:
- Java系统属性配置 (格式: -Dkey=value) -Dserver.port=9000
- 命令行参数 (格式:--key=value) --server.port=10010
03.优先级: 命令行参数 > 系统属性参数 > properties参数 > yml参数 > yaml参数
使用命令:java -jar 方式运行jar文件程序:
java -jar springboot-web1.0-SNAPSHOT.jar --server.port=10010
java -Dserver.port=9000 -jar springboot-web1.0-SNAPSHOT.jar
04.SpringBoot项目当中,常见的属性配置方式有5种:
application.yaml(忽略)
application.yml
application.properties
java系统属性(-Dxxx=xxx)
命令行参数(--xxx=xxx)
二。bean管理
01.@Component三个衍
生注解(@Controller、@Service、@Repository)来声明IOC容器中的bean对象
02.IOC容器中Bean的其他使用细节:
1 如何从IOC容器中手动的获取到bean对象
2. bean的作用域配置
3. 管理第三方的bean对象
03.默认情况下,SpringBoot项目在启动的时候会自动的创建IOC容器(也称为Spring容器),并且在启动
的过程当中会自动的将bean对象都创建好,存放在IOC容器当中。应用程序在运行时需要依赖什么bean
对象,就直接进行依赖注入就可以.
04.在Spring容器中提供了一些方法,可以主动从IOC容器中获取到bean对象,下面介绍3种常用方式:
根据name获取bean:Object getBean(String name)
根据类型获取bean:
根据name获取bean(带类型转换):
05.bean作用域:IOC容器当中,默认bean对象是单例模式(只有一个实例对象)
在Spring中支持五种作用域,后三种在web环境才生效:
作用域 说明
singleton 容器内同名称的bean只有一个实例(单例)(默认)
prototype 每次使用该bean时会创建新的实例(非单例)
request 每个请求范围内会创建新的实例(web环境中,了解)
session 每个会话范围内会创建新的实例(web环境中,了解)
application 每个应用范围内会创建新的实例(web环境中,了解)
知道了bean的5种作用域了,我们要怎么去设置一个bean的作用域呢?
可以借助Spring中的@Scope注解来进行配置作用域:
@Scope("prototype")
@Lazy //延迟加载(第一次使用bean对象时,才会创建bean对象并交给ioc容器管理)
@RestController
@RequestMapping("/depts")
public class DeptController {
06.怎样使用并定义第三方的bean呢?
如果要管理的bean对象来自于第三方(不是自定义的),是无法用@Component 及衍生注解声明
bean的,就需要用到@Bean注解。
解决方案1:在启动类上添加@Bean标识的方法:
@SpringBootApplication
public class SpringbootWebConfig2Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootWebConfig2Application.class,
args);
}
//声明第三方bean
@Bean //将当前方法的返回值对象交给IOC容器管理, 成为IOC容器bean
public SAXReader saxReader(){
return new SAXReader();
}
测试类调用:
@Autowired
private SAXReader saxReader;
saxReader.read();
解决方案2:在配置类中定义@Bean标识的方法:
如果需要定义第三方Bean时, 通常会单独定义一个配置类:
@Configuration //配置类 (在配置类当中对第三方bean进行集中的配置管理)
public class CommonConfig {
//声明第三方bean
@Bean //将当前方法的返回值对象交给IOC容器管理, 成为IOC容器bean //通过@Bean注解的name/value属性指定bean名称, 如果未指定, 默认是方法名
public StAXStreamReader reader(DeptService deptService){
return new StAXStreamReader();
}
关于Bean大家只需要保持一个原则:
如果是在项目当中我们自己定义的类,想将这些类交给IOC容器管理,我们直接使用@Component
以及它的衍生注解来声明就可以。
如果这个类它不是我们自己定义的,而是引入的第三方依赖当中提供的类,而且我们还想将这个类
交给IOC容器管理。此时我们就需要在配置类中定义一个方法,在方法上加上一个@Bean注解,通
过这种方式来声明第三方的bean对象。
三。 SpringBoot原理
现基于SpringBoot进行web程序的开发是非常简单、非常高效的.
01.基于Spring框架进行项目的开发,会比较繁琐:
这个繁琐主要体现在两个地方:
- 在pom.xml中依赖配置比较繁琐,在项目开发时,需要自己去找到对应的依赖,还需要找到依赖
它所配套的依赖以及对应版本,否则就会出现版本冲突问题。 - 在使用Spring框架进行项目开发时,需要在Spring的配置文件中做大量的配置,这就造成
Spring框架入门难度较大,学习成本较高
02.基于Spring存在的问题,官方在Spring框架4.0版本之后(2013),又推出了一个全新的框架:SpringBoot(2014)。
通过 SpringBoot来简化Spring框架的开发(是简化不是替代)。我们直接基于SpringBoot来
构建Java项目,会让我们的项目开发更加简单,更加快捷。
03.SpringBoot框架之所以使用起来更简单更快捷,是因为SpringBoot框架底层提供了两个非常重要的
功能:一个是起步依赖,一个是自动配置。
起步依赖:解决了Spring框架当中依赖配置繁琐的问题(因为Maven的依赖传递,组依赖的代理:springboot-starter-web)
自动配置:大大的简化框架在使用时bean的声明以及bean的配置,起步依赖帮助配置所用到常见的配置.
引入依赖,版本匹配版本,
SpringBoot的自动配置就是当Spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器
中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作.
自定义类,配置类,第3方类都可以是SpringIOC容器当中的一个bean对象.
04.SpringBoot项目中的@SpringBootApplication注解,具有包扫描的作用,但是它只会扫描启
动类所在的当前包以及子包。
当前包:com.alex, 第三方依赖中提供的包:com.example(扫描不到)
那么如何解决以上问题的呢?
方案1:@ComponentScan 组件扫描
方案2:@Import 导入(使用@Import导入的类会被Spring加载到IOC容器中)
@SpringBootApplication
@ComponentScan({"com.alex","com.example"}) //指定要扫描的包
public class SpringbootWebConfig2Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootWebConfig2Application.class,
args);
}
}
方案2:
@Import导入
导入形式主要有以下几种:
- 导入普通类
- 导入配置类
- 导入ImportSelector接口实现类
@Import(TokenParser.class) //导入的类会被Spring加载到IOC容器中
@SpringBootApplication
public class SpringbootWebConfig2Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootWebConfig2Application.class,
args);
}
使用@Import导入配置类:
@Import(HeaderConfig.class) //导入配置类 HeaderConfig.class【添加@Configuration,方法添加@Bean】
@SpringBootApplication
public class SpringbootWebConfig2Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootWebConfig2Application.class(args);
}
05.自动配置的核心就在@SpringBootApplication注解上,SpringBootApplication这个注解
底层包含了3个注解,分别是:
@SpringBootConfiguration
@ComponentScan
@EnableAutoConfiguration //自动配置的核心,@Import注解,
自动配置类当中,所有的 bean都会加载到 spring 的
IOC 容器当中吗?其实并不会,它会根据 @Conditional 注解来进行条件装配。只有条件成立,它才会声明这
个bean,才会将这个 bean 交给 IOC 容器管理
06.SpringMVC不是一个单独的框架,它是Spring框架的一部分,是Spring框架中的web开发模
块,是用来简化原始的Servlet程序开发的。(SpringMVC=Springweb)
07.SSM,就是由:SpringMVC、Spring Framework、Mybatis三块组成
基于SpringBoot整合SSM进行项目开发.
Java 技术栈:
Spring、SpringBoot/Cloud、Dubbo、JVM、集合、多线程、JPA、MyBatis、MySQL、大数据、Nginx、Git、Docker、GitHub、Servlet、JavaWeb、IDEA、Redis、算法等技术栈.
--------AOP-----
01.AOP面向方法编程,就可以做到在不改动这些原始方法的基础上,针对特定的方法进行功能的增强.无侵入性: 解耦
场景:记录方法执行的时间
02.AOP的优势:
- 减少重复代码
- 提高开发效率
- 维护方便
03.导入依赖:
1.在pom.xml中导入AOP的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
- 编写AOP程序:针对于特定方法根据业务需要进行编程
典型场景:
1.记录系统的操作日志
2.权限控制
3.事务管理:我们前面所讲解的Spring事务管理,底层其实也是通过AOP来实现的,只要添加
@Transactional注解之后,AOP程序自动会在原始方法运行前先来开启事务,在原始方法运行完
毕之后提交或回滚事务.