JavaWeb-Springboot-2
配置优先级
从上至下优先级
命令行参数>java系统属性
Bean管理
Spring项目启动时,会把bean都创建好放到IOC容器当中,如果想要主动获取这些bean:
bean的获取
在spring容器中,bean默认是单例的
作用域 | 说明 |
---|---|
singleton | 容器内同 名称 的 bean 只有一个实例(单例)(默认) |
prototype | 每次使用该 bean 时会创建新的实例(非单例) |
request | 每个请求范围内会创建新的实例(web环境中,了解) |
session | 每个会话范围内会创建新的实例(web环境中,了解) |
application | 每个应用范围内会创建新的实例(web环境中,了解) |
1 |
|
注意事项
默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)。
prototype的bean,每一次使用该bean的时候都会创建一个新的实例。
实际开发当中,绝大部分的Bean是单例的,也就是说绝大部分Bean不需要配置scope属性。
第三方bean
1 |
如果要管理的bean对象来自于第三方(不是自定义的,是无法用@Component以及衍生注解声明bean的,就是需要用到@Bean注解)
一、用启动类,不建议
二、用第三方bean对象
用配置类声明第三方bean对象
通过 @Bean注解的name/value属性指定bean名称,如果没有指定,默认是方法名
SpringBoot原理
起步依赖
Maven存在一个依赖传递,只要提供一个起步依赖
自动配置
SpringBoot的自动配置就是当spring容器启动之后,一些配置类,bean对象就自动的存入了IOC容器中,不需要我们手动去声明
当想要实现从另外一个项目引入
springboot只能扫描到启动类及其子包,扫描不到其他的包
方案一:ComponentScan(使用繁琐,效率低)
1 |
|
方案二:@Import 导入。
使用@Import导入的类会被Spring加载到IOC容器中,导入形式主要有以下几种:
- 导入 普通类
- 导入 配置类
- 导入 ImportSelector 接口实现类
@EnableXxxx注解,封装@Import注解
源码跟踪
@SpringBootApplication
——->
1 |
|
@Conditional
以conditional开头的注解都是条件装配的注解
作用:按照一定的条件进行判断,在满足给定条件后才会注册对应的bean对象到Spring IOC容器中。
位置:方法、类
@Conditional 本身是一个父注解,派生出大量的子注解:
- @ConditionalOnClass:判断环境中是否有对应字节码文件,才注册bean到IOC容器。
- @ConditionalOnMissingBean:判断环境中没有对应的bean(类型 或 名称) ,才注册bean到IOC容器。
- @ConditionalOnProperty:判断配置文件中有对应属性和值,才注册bean到IOC容器。
1 |
|
自定义starter
需求:自定义aliyun-oss-spring-boot-starter,完成阿里云OSS操作工具类 AliyunOSSUtils 的自动配置。
目标:引入起步依赖引入之后,要想使用阿里云OSS,注入 AliyunOSSUtils直接使用即可。
不想听了