一、配置优先级
1.配置文件
properties > yml > yaml
2.属性配置优先级
命令行参数(--xxx=xxx)> Java系统属性 (-Dxxx=xxx)> properties > yml > yaml
注意事项
虽然springboot支持多种格式配置文件,但是在项目开发时,推荐统一使用一种格式的配置
(yml是主流)。
二、Bean管理
1.第三方Bean
1.1 @Bean注解
如果要管理的对象来自于第三方(不是自定义的),是无法用 @Component 及衍生注解来声
明bean的,就需要用到 @Bean注解
@Configuration
public class CommonConfig {
@Bean
public BASE64Encoder base64Encoder() {
return new BASE64Encoder();
}
}
注意事项:
通过@Bean注解的name或value属性可以声明bean的名称,如果不指定,默认bean的名称就是方法名。
1.2 @Component 及衍生注解 与 @Bean注解使用场景?
项目中自定义的,使用@Component注解
项目中引入第三方的,使用@Bean注解
2.获取bean
Spring容器启动时,会把其中的bean都创建好,如果想要主动获取这些bean,可以通过如下
方式:
根据类型获取bean <T> T getBean(Class<T> requiredType)
根据name获取bean Object getBean(String name)
根据name获取bean(带类型转换) <T> T getBean(String name, Class<T> requiredType)
注意事项
上述所说的 【Spring容器启动时,会把其中的bean都创建好】还会受到作用域scope及延迟初始化lazy影响,这里主要针对于 默认的单例非延迟加载的bean而言。
3.bean作用域
Spring支持五种作用域,后三种在web环境才生效:
可以通过 @Scope 注解来进行配置作用域
注意事项:
默认singleton的bean,在容器启动时被创建。
prototype的bean,每一次使用该bean的时候都会创建一个新的实例。
三、Spring自动配置原理
1.自动配置
SpringBoot的自动配置就是当spring容器启动后,一些配置类就自动装配到IOC容器中,不
需要我们手动去声明,从而简化了开发,省去了繁琐的配置等操作。
2.自动配置原理
2.1 @Conditional
— 作用:按照一定的条件进行判断,需要声明的Bean,在满足给定条件后才会注册到Spring
IOC容器中。
— @Conditional 本身还是一个父注解,派生出大量的子注解:
@ConditionalOnClass:判断环境中是否有对应字节码文件,才注册bean到IOC容器。
@ConditionalOnMissingBean:判断环境中没有对应的bean ,才注册bean到IOC容器。
@ConditionalOnProperty:判断配置文件中是否有对应属性和值,才注册bean到IOC容器。
2.2 @Import
— 作用:导入的bean 和 配置类会被Spring加载到IOC容器中。
— @Import注解主要可以导入形式有以下几种:
bean
配置类
mportSelectorsors接口子类
2.3 原理
@SpringBootApplication 该注解标识在SpringBoot工程引导类上,是SpringBoot中最最最重
要的注解。该注解由三个部分组成:
— @SpringBootConfiguration:该注解与 @Configuration 注解作用相同,用来声明当前也是一个配置类。
— @ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包。
— @EnableAutoConfiguration(@Import):SpringBoot实现自动化配置的核心注解。
3.自定义starter
在实际开发中,经常会定义一些公共组件,提供给各个项目团队使用。而在SpringBoot的项
目中,一般会将这些公共组件封装为SpringBoot 的 starter,传到maven的远程仓库(私服)中。
将来引入对应坐标依赖,即可快速使用这些功能。