黑马程序员JavaWeb开发教程
文章目录
- 一、配置优先级
- 1.1 SpringBoot 中支持三种格式的配置文件
- 1.2 Java系统属性 & 命令行参数
- 1.3 总结
- 二、Bean管理
- 2.1 获取bean
- 2.1.1 在默认情况下
- 2.2 bean 作用域(实际开发中一般不需要考虑)
- 2.2.1 bean的作用域
- 2.2.2 配置bean的作用域
- 2.2.3 注意事项
- 2.3 第三方bean
- 2.3.1 @Bean
- 2.3.2 注意事项
- 2.3.3 @Component 及衍生注解与@Bean 注解使用场景
一、配置优先级
1.1 SpringBoot 中支持三种格式的配置文件
- 三种格式配置文件:
- application.properties
server.port=8080
- application.yml
- application.yaml
- application.properties
server:
port: 8080
- 他们的优先级从左到右依次降低
- 注意事项:在项目开发式推荐同意使用一种格式的配置(yml是主流)
1.2 Java系统属性 & 命令行参数
- 命令行参数的优先级高于Java系统属性
- Java系统属性
-Dserver.port=8080
- 命令行参数
--server.port=8080
- 使用方法
- 执行Maven打包指令package 得到一个打包好的项目
- 执行Java指令运行 jar包
- 执行Maven打包指令package 得到一个打包好的项目
java -Dserver.port=8080 -jar tlias-web-management-0.0.1-SNAPSHOT.jar
java -jar tlias-web-management-0.0.1-SNAPSHOT.jar --server.port=8080
1.3 总结
命令行参数 > Java系统属性 > application.properties > application.yml > application.yaml
二、Bean管理
2.1 获取bean
2.1.1 在默认情况下
- 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)
- 上述所说的【spring项目启动时,会把bean都创建好】还会收到作用域及延迟初始化影响,这里主要针对于默认的单例非延迟加载的bean而言
2.2 bean 作用域(实际开发中一般不需要考虑)
2.2.1 bean的作用域
- Spring 支持五种作用域,后三种在web环境才生效
2.2.2 配置bean的作用域
- 可以通过 @Scope 注解来配置bean的作用域
2.2.3 注意事项
- 默认 singleton 的bean,在容器启动时被创建,可以使用 @Lazy 注解来延迟初始化(延迟到第一次使用时)
- protoType的bean,每一次使用该bean的时候都会创建一个新的实例
- 实际开发中,绝大部分Bean是单例的,也就是说绝大部分bean不需要配置scope属性
2.3 第三方bean
2.3.1 @Bean
- 如果要管理的bean对象来自于第三方(不是自定义的),是无法用@Component及衍生注解声明bean的,就需要用到@Bean注解。【下例是直接在启动类中管理第三方bean对象了,不推荐】
- 若要管理第三方bean对象,建议对这些bean进行集中分类配置,可以通过@Configuration注解声明一个配置类
2.3.2 注意事项
- 通过@Bean注解的name或者value属性,可以声明bean的名称,如果不指定,那么bean的名称默认就是方法名
- 如果第三方bean需要依赖其他的bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配
2.3.3 @Component 及衍生注解与@Bean 注解使用场景
- 项目中自定义的,使用@Component及其衍生注解
- 项目中引入第三方的,使用@Bean注解