一、配置优先级(低到高)
1.application.yaml(忽略)
2.application.yml
3.application.properties
4.java系统属性(-Dxxx=xxx)
5.命令行参数(--xxx=xxx)
二.Bean管理
1.作用域
(1)singleton:容器内同 名称 的 bean 只有一个实例(单例)(默认)
prototype:每次使用该 bean 时会创建新的实例(非单例)
request:每个请求范围内会创建新的实例(web环境中,了解)
session:每个会话范围内会创建新的实例(web环境中,了解)
application:每个应用范围内会创建新的实例(web环境中,了解)
注意:Spring支持五种作用域,后三种在web环境才生效。
(2)如何设置bean的作用域?
@Scope("singleton")
(3).如果从Spring容器中获取bean对象?
注入ApplicationContext;
调用getBean方法从Spring容器中获取bean对象;
2.第三方Bean
1.@Component
2.@Controller
3.@Service
4.@Repository
注意:什么时候使用@Component声明bean,什么时候使用@Bean注解?
一般如果是项目中自定义的类,使用@Component及其衍生注解;
如果是引入第三方依赖中的类,使用@Bean注解;
三。SpringBoot原理
起步依赖
自动化配置原理
1、一个注解
启动类上 SpringBootApplication 注解,它是一个复合注解,内部有三个注解组成
1.SpringBootConfiguration,底层是一个Configuration,表示启动类也是一个配置类,可以在内部定义相关Bean
2.ComponentScan,表示组件扫描,默认会扫描启动类包及子包下Spring能识别的组件
3.EnableAutoConfiguration,底层是一个Import注解,该注解中导入 AutoConfigurationImportSelector类,该类中有一个 selectImports 方法会被调用,该方法最终会去加载 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件中的内容,并筛选满足starter和各种Condtional条件的全类名,封装成一个字符串数组加载到内存中
2、一个方法
启动类会通过run方法去创建与初始化Spring容器,在初始化时会把上面注解加载到内存中的字符串数组对应的内容,创建成对象注入到Spring容器,至此就完成了自动化装配
四:自定义starter
场景:在实际开发中,经常会定义一些公共组件,提供给各个项目团队使用。而在SpringBoot的项目中,一般会将这些公共组件封装为SpringBoot 的 starter(包含了起步依赖和自动配置的功能)。
需求:自定义aliyun-oss-spring-boot-starter,完成阿里云OSS操作工具类 AliyunOSSUtils 的自动配置。
目标:引入起步依赖引入之后,要想使用阿里云OSS,注入 AliyunOSSUtils直接使用即可。
步骤:
1.创建aliyun-oss-spring-boot-starter模块
2.创建aliyun-oss-spring-boot-autoconfigure模块,在starter中引入该模块
3.在aliyun-oss-spring-boot-autoconfigure模块中的定义自动配置功能,并定义自动配置文件 META-INF/spring/xxxx.imports