一、配置优先级
SpringBoot 中支持三种格式的配置文件,优先级为:
application.properties > application.yml > application.yaml
-
虽然Springboot支持多种格式配置文件,但是在项目开发时,推荐统一使用一种格式的配置(yml是主流)。
-
Springboot除了支持配置文件属性配置,还支持Java系统属性和命令行参数的方式进行属性配置。
-
Java系统属性:
Dserver.port=9000
- 命令行参数
--server.port=10010
-
- 在idea中设置:
- 在idea中设置:
-
- 若项目打包了:
- 注:Springboot项目进行打包时,需要引入插件spring-boot-maven-plugin(基于官网骨架创建项目,会自动添加该插件)
- 优先级:命令行参数>java系统属性
- 优先级由高->低:
命令行参数>java系统属性>application.properties > application.yml > application.yaml
二、控制反转
- Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。
Bean的声明
- 声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。
- 使用以上四个注解都可以声明bean,但是在Springboot集成web开发中,声明控制器bean只能用@Controller。
三、依赖注入
- Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
3.1 Bean组件扫描
- 前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描。
- @ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解@SpringBootApplication中,默认扫描的范围是启动类所在包及其子包。
3.2 Bean注入
- @Autowired注解,默认是按照类型进行,如果存在多个相同类型的bean,将会报错。
- 通过一下几种方案来解决
- @Primary
- @Qualifier
- @Resource
- @Resource与@Autowired区别
- @Autowired是spring框架提供的注解,而@Resource是JDK提供的注解。
- @Autowiredwired默认是按照类型注入,而@Resource默认是按照名称注入。
四、Bean对象
- IOC容器中创建、管理的对象,称之为Bean。
五、Bean管理
5.1 获取bean
- 默认情况下,Spring项目启动时,会把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)
- 根据name获取bean:
5.2 bean作用域
- 可以通过@Scope注解来进行配置作用域
- 默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)。
- prototype的bean,每一次使用该bean的时候都会创建一个新的实例。
- 实际开发中,绝大部分的bean都是单例的,也就是说绝大部分bean不需要配置scope属性。
5.3 第三方bean
- @Bean:如果要管理的bean对象来自于第三方(不是自定义的),是无法用@Component及衍生注解生命bean的,就需要用到@Bean注解。
- 若要管理的第三方bean对象,建议对这些bean进行集中分类配置,可以通过@Configuration注解声明一个配置类。
- 注意
- 通过@Bean注解的name或value属性可以声明bean的名称,如果不指定,默认bean的名称就是方法名。
- 如果第三方bean需要依赖其他bean对象,直接在bean定义方法中设计形参即可,容器会根据类型自动装配。