1.配置优先级

三类配置文件:application.properties    application.yml    application.yaml

如果这三类配置文件同时存在,且配置了同一属性,哪份配置文件生效:

- properties、yaml、yml三种配置文件,优先级最高的是properties

- yaml、yml 两种配置文件,优先级最高的是yml

从高到低:properties配置文件    yml配置文件   yaml配置文件

SpringBoot为了增强程序的扩展性,除了支持配置文件的配置方式以外,还支持另外两种常见的配置方式:

- Java系统属性配置 (格式: -Dkey=value)

- 命令行参数 (格式:--key=value)

如何指定Java系统属性和命令行参数:

- 编辑启动程序的配置信息

打开之后,选择 Modify options , 选择 Add VM options, Program arguments

- 重启服务,同时配置Tomcat端口(application.properties、系统属性、命令行参数),测试哪个Tomcat端口号生效

五种配置方式的优先级: 命令行参数 > 系统属性参数 > properties参数 > yml参数 > yaml参数

打包程序运行时指定Java系统属性和命令行参数:

- 执行maven打包指令package,把项目打成jar文件

- 使用命令:java -jar 方式运行jar文件程序,同时设置Java系统属性和命令行参数

2.Bean的管理

Bean的作用域:

(支持五种作用域,后三种在web环境下有效)

注:

IOC容器中的bean默认使用的作用域:singleton (单例)

默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)

实际开发当中,绝大部分的Bean是单例的,也就是说绝大部分Bean不需要配置scope属性

设置一个bean的作用域:借助Spring中的@Scope注解

第三方Bean:

如果要管理的bean对象来自于第三方(不是自定义的),是无法用@Component及衍生注解声明bean的,就需要用到@Bean注解

代码示例一:

在启动类中直接声明这个Bean

代码示例二:

若要管理的第三方 bean 对象,建议对这些bean进行集中分类配置,可以通过 @Configuration 注解声明一个配置类

注:

通过@Bean注解的name 或 value属性可以声明bean的名称,如果不指定,默认bean的名称就是方法名

如果第三方bean需要依赖其他bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配

3.SpringBoot原理

起步依赖:

假如没有使用SpringBoot,用的是Spring框架进行web程序的开发,此时就需要引入web程序开发所需要的一些依赖

当引入了 spring-boot-starter-web 之后,maven会通过依赖传递特性,将web开发所需的常见依赖都传递下来

起步依赖的原理就是Maven的依赖传递

自动配置:

自动配置就是当spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要手动去声明

通过代码分析:

准备工作:导入 itheima-utils 工程(可以私信我进行代码寻要)

在SpringBoot项目 spring-boot-web-config 工程中,通过坐标引入itheima-utils依赖

步骤:

- 引入的 itheima-utils 中配置

- 在测试类中,添加测试方法

- 执行测试方法

异常信息描述: 没有com.example.TokenParse类型的bean

说明:在Spring容器中没有找到com.example.TokenParse类型的bean对象

原因:

在类上添加@Component注解来声明bean对象时,还需要保证@Component注解能被Spring的组件扫描到

SpringBoot项目中的@SpringBootApplication注解,具有包扫描的作用,但是它只会扫描启动类所在的当前包以及子包

当前包:com.itheima, 第三方依赖中提供的包:com.example(扫描不到)

解决:

方案一:

@ComponentScan组件扫描

方案二:

@Import导入

导入形式有三类:

- 使用@Import导入普通类:

- 使用@Import导入配置类:

- 使用@Import导入ImportSelector接口实现类:

- 使用第三方依赖提供的 @EnableXxxxx注解

自动配置的核心就在@SpringBootApplication注解上,SpringBootApplication这个注解底层包含了3个注解,分别是:

@SpringBootConfiguration

@ComponentScan

@EnableAutoConfiguration(核心)

4.自定义starter

SpringBoot官方starter命名: spring-boot-starter-xxxx

第三组织提供的starter命名: xxxx-spring-boot-starter

在自定义一个起步依赖starter的时候,按照规范需要定义两个模块:

- starter模块(进行依赖管理[把程序开发所需要的依赖都定义在starter起步依赖中])

- autoconfigure模块(自动配置)

将来在项目当中进行相关功能开发时,只需要引入一个起步依赖就可以了,因为它会将autoconfigure自动配置的依赖给传递下来

需求:

自定义aliyun-oss-spring-boot-starter,完成阿里云OSS操作工具类 AliyunOSSOperator 的自动配置

步骤:

- 创建自定义starter模块 aliyun-oss-spring-boot-starter(进行依赖管理)

(把阿里云OSS所有的依赖统一管理起来)

- 创建完starter模块后,删除多余的文件,只保留一个pom.xml文件

pom文件:

- 创建 aliyun-oss-spring-boot-autoconfigure 模块

- 创建完starter模块后,删除多余的文件,只保留 srcpom.xml

pom文件

- 在aliyun-oss-spring-boot-autoconfigure模块当中来完成自动配置操作

完成之后,@Component注解不需要使用了,可以从类上删除

- 删除 AliyunOSSOperator 工具类上的 @Component 注解 和 @Autowired 注解

- 删除 AliyunOSSProperties 实体类上的 @Component 注解

更多推荐