一、SpringBoot中配置文件的优先级?
- SpringBoot除了支持properties的配置文件格式以外,还支持yaml格式的配置文件(yaml或yml)。
A. application.properties
server.port=8080
B. application.yml
server:
port: 8081
C. application.yaml
server:
port: 8082
注意事项:
- 虽然SpringBoot支持多种格式的配置文件,但是在项目开发时,推荐统一使用一种格式的配置(yml是主流)。
- SpringBoot 除了支持配置文件属性配置以外,还支持Java系统属性和命令行参数的方式进行属性配置。
A. Java系统属性配置
-Dserver.port=9000
如果我们的应用程序是在IDEA中运行,可以在IDEA工具栏的 "VM options" 栏设置Java系统属性。
B. 命令行参数配置
--server.port=10010
如果我们的应用程序是在IDEA中运行,可以在IDEA工具栏的 "Program arguments" 栏设置命令行参数。
如果项目开发完了,打包运行,我们可以在运行jar包时,在命令行中加入指定参数:
- 执行maven的打包指令package(或者直接通过图形化界面操作)
- 执行java命令,运行jar包
java -Dserver.port=9000 -jar tlias-web-management-0.0.1-SNAPSHOT.jar --server.port=10010
注意事项:
- SpringBoot项目进行打包时,需要引入插件 spring-boot-maven-plugin (通过官方骨架创建的工程自带了)。
二、SpringBoot中配置端口有哪些方式,优先级是怎样的?
- application.yaml
- application.yml
- application.properties
- Java系统属性(-Dxxxx=xxxx)
- 命令行参数(--xxxx=xxxx)
这些配置的优先级,我们可以参考官方文档:
三、能够说出bean的两种常见的作用域及如何设置作用域?
Spring 支持五种作用域,后三种在 web 环境才生效
作用域 | 说明 |
singleton | 容器内同 id 的 bean 只有一个实例(单例)(默认) |
prototype | 每次使用该 bean 时会创建新的实例(非单例) |
request | 每个请求范围内会创建新的实例(web环境中,了解) |
session | 每个会话范围内会创建新的实例(web环境中,了解) |
application | 每个应用范围内会创建新的实例(web环境中,了解) |
四、怎么使用@Bean注解来管理第三方bean
通过 @Bean 注解的name属性 或 value 属性可以声明 bean 的名称,如果不指定,默认bean的名称就是方法名。
- 如果要管理的第三方 bean 比较多,建议对这些bean进行集中分类配置,可以通过 @Configuration 注解声明一个配置类。
五、@Conditional注解和@Import注解的作用是什么?
通过 @Bean 注解的name属性 或 value 属性可以声明 bean 的名称,如果不指定,默认bean的名称就是方法名。
@Component 及 衍生注解 与 @Bean注解的使用场景:
- 项目中自定义的,直接使用@Component及其衍生注解来声明bean即可。
- 项目中引入的第三方的,使用@Bean注解声明bean即可。
六、简要的说出springboot自动配置的原理?
Spring家族的其他框架都是基于SpringFramework的。 但是直接使用Spring框架进行集成开发比较繁琐,入门难度很大,所以在现在的企业开发中,都是直接基于Springboot进行开发,简单、快捷、高效,而且spring官方也是建议直接从springboot开始。
原因主要有两点:
- 起步依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
这里看到的spring-boot-starter-xxx 就是 SpringBoot的起步依赖。SpringBoot通过提供众多起步依赖降低项目依赖的复杂度。起步依赖本质上是一个Maven项目对象模型,定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。很多起步依赖的命名都暗示了他们提供的某种或某类功能。
- 自动配置
- SpringBoot的自动配置就是当spring容器启动后,一些配置类就自动装配的IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置等操作。
- 要想明白SpringBoot 自动配置原理,先需要明白两个前置知识 @Conditional 条件注解 和 @Import 导入配置。