一、配置优先级
从低到高:
- application.yaml(忽略)
- application.yml
- applaication.properties
- java系统属性(-Dxxx=xxx)
- 命令行参数(-xxx=xxx)
二、Bean管理
1.获取bean
默认情况下,Spring项目启动时,会把bean都创建好放在IOC容器中,如果想要主动获取这些bean,可以通过如下方式(主要针对默认的单例非延迟加载的bean而言):
Object getBean(String name)
<T> T getBean(Class<T> requiredType)
<T> T getBean(String name, Class<T> requiredType)
2.bean作用域
Spring支持五种作用域,后三种在web环境才生效:
- singleton:容器内同名称的bean只有一个实例(单例)(默认)
- prototype:每次使用该bean时会创建新的实例(非单例)
- request:每个请求范围内会创建新的实例(了解
- session:每个会话范围内会创建新的实例(了解
- application:每个应用范围内会创建新的实例(了解
@Scope:用来配置bean的作用域
- 默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)
- prototype的bean,每一次使用该bean的时候都会创建一个新的实例
- 实际开发当中,绝大部分的bean是单例的,即绝大部分bean不需要配置scope属性
3.第三方bean
@Bean:
如果要管理的bean对象来自于第三方(不是自定义的),是无法用@Component及衍生注解声明bean的,就需要用到@Bean注解。
@Componet及衍生注解@Bean注解的使用场景:
- 项目种自定义的,使用@Componet及衍生注解
- 项目中引入第三方的,使用@Bean注解
三、SpringBoot管理
1.Spring
Spring Framework:繁琐(依赖、配置)
Spring Boot:简单、快捷
2.SpringBoot原理
1)起步依赖原理
maven的依赖传递
2)自动配置原理?面试高频
a)自动配置:
SpringBoot的自动配置就是当spring容器启动后,一些配置类,bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。
-
@ComponentScan组件扫描
-
@Import导入,使用@Import导入的类会被Spring加载到IOC容器中,导入形式如下:
-
导入普通类
-
导入配置类
-
导入ImportSelector接口实现类
-
@EnableXxxx注解,封装@Import注解(方便,SpringBoot采用的方式
b)源码跟踪
@SpringbootApplication:该注解标识在SpringBoot工程引导类上,是SpringBoot中最最最重要的注解,该注解有三个部分组成:
- @SpringbootConfiguration:该注解与@Configuration注解作用相同,用来声明当前也是一个配置类。
- @ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包。
- @EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解。
@Conditional
- 作用:按照一定的条件进行判断,在满足给定条件后才会注册对应的bean对象到Spring IOC容器中。
- 位置:方法、类
- @Conditional本身是一个父注解,派生出大量的子注解:
- @ConditionalOnClass:判断环境中是否有对应字节码文件,才注册bean到IOC容器;//当前环境存在指定的这个类时,才声明该bean
- @ConditionalOnMissingBean:判断环境中没有对应的bean(类型或名称),才注册bean到IOC容器;//当不存在当前类型的bean时,才声明该bean
- @ConditionalOnProperty:判断配置文件中有对应属性和值,才注册bean到IOC容器。//配置文件中存在对应的属性和值,才注册bean到IOC容器
【总结】
@EnableAutoConfiguration是SpringBoot实现自动化配置的核心注解,其底层封装了@Import注解,里面指定了一个类,是ImportSelect这个接口的实现类。在这个实现类中需要实现ImportSelect接口的selectImports方法,这个方法的返回值代表的是需要将哪些类交给SpringBoot的IOC容器进行管理。
此时,该方法会读取两份文件,spring.factories和AutoConfiguration.imports,后者会配置大量的自动配置的类,这些自动配置类中并不是所有的bean都会加载到SpringBoot的IOC容器中,而是根据@Conditional注解进行条件装配,只有条件成立,才会声明这个bean,才会将这个bean交给IOC容器管理。
3)案例(自定义starter)
四、Web后端开发总结
SSM框架:SpringMVC、Spring Framework、Mybatis