javaWeb开发之SpringBoot原理
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模块后,删除多余的文件,只保留 src 和 pom.xml

pom文件

- 在aliyun-oss-spring-boot-autoconfigure模块当中来完成自动配置操作
完成之后,@Component注解不需要使用了,可以从类上删除
- 删除 AliyunOSSOperator 工具类上的 @Component 注解 和 @Autowired 注解
- 删除 AliyunOSSProperties 实体类上的 @Component 注解
更多推荐

所有评论(0)