SpringBoot配置
SpringBoot 除了支持配置文件属性配置,还支持Java系统属性和命令行参数的方式进行属性配置。
Java系统属性
-Dserver.port=9000
命令行参数
--server.port=10010
优先级(低~高)
Application.yaml(忽略)
Application.yml
Application.properties
Java系统属性(-Dxxx=xxx)
命令行参数(--xxx=xxx)
获取bean
在IOC启动的时候才获取的bean对象
根据name获取bean: Object getBean(String name)
根据类型获取bean: <T> T getBean(Class<T> requiredType)
根据name 获取bean(带类型转换): <T> T getBean(String name,Class<T> requiredType)
Bean的作用域
String支持五种作用域,后三种在Web环境下生效:
作用域
Singletion 容器内同名称的bean只有一个实列(单列)(默认)
Prototype 每次使用该bean时会创建新的实列(非单列)
Request 每个请求范围内会创建新的实列(Web环境中,了解)
Session 每个会话范围内会创建新的实列(Web环境中,了解)
Application 每个应用范围内会创建新的实列(Web环境中,了解)
Bean的作用域
通过@Scope注解来进行配置作用域
注意事项:
默认singleton的bean,就是在容器启动的时候被创建,可以使用@Lazy注解来延迟初始化(延迟到一次使用的时候).
Prototype的bean,每一次使用该bean的时候都会创建一次对象(实列)
实际开发当中,绝大部分的Bean是单列的,也就是说大部分的Bean是不需要配置scope属性.
如果是第三方@Bean来管理对象的话(不是自定义),是无法使用@Component衍生注解声明bean的,因此就需要@Bean注解.
@Bean 将方法下的返回值交给IOC容器管理,成为IOC容器的bean对象
如果要定义第三方的@Bean对象的话,对这些bean集中分类配置,可以通过@Configuration注解声明一个配置类
通过@Bean注解的name/value的属性去指定bean名称,如果没有指定,就会默认方法名
通过@Bean注解下的方法指定找到bean
@Component及衍生注解与@Bean注解使用场景?
如果是我们自己定义一个类来使用的话就需要@Component
如果是在项目引入第三方的,而且还想交个IOC引用的那么就是需要使用@Bean注解
自动配置
SpringBoot自动配置就是启动Spring容器启动之后,一些配置类、beande 对象就会自动的存入Ioc容器中,不需要手动,从而简化开发效率。
@ComponentSan组件指定的包名进行扫描所有的bean
@Import导入。使用@Import导入的类会被String加载到容器中,导入的形式有以下几种:
导入 普通类、配置类
导入 ImportSelector接口实现类
@EnableXxxx注解,封装@Import注解
@SpringBootApplication
该注解标识在SpringBoot工程引导类上,是SpringBoot中最重要的注解.该注解由三部分组成:
@SpringBootConfiguration: 该注解与@Configuration注解作用相同,用来声明当前也是一个配置类.
@ComponentScan: 组件扫描,默认扫描当前引导类所在的包以及子包
@EnableAutoConfiguration: SpringBoot实现自动化配置的核心注解。
@Conditional
作用:按照一定的条件进行判断,在满足给定条件之后才会被注册对应的bean对象到Spring IOC容器中。
位置: 方法,类
@ConditionalOnClass: 判断环境中是否有对应字节码文件,才注册bean到IOC容器中。
(当前环境存在指定的这个类时,才会声明该bean)
@ConditionalOnMissingBean:判断环境中没有对应的bean(类型 或者名称),注册bean到IOC容器。
(不存在该类型的bean,才会将该bean加入容器中—指定类型(value属性) 或者是名称(name属性))
@ConditionalOnProperty: 判断配置文件中对应属性和值,才到注册bean到IOC容器。
(配置文件中存在对应的属性和值,才注册到bean到IOC容器)