今天我学习了web后端开发的最后一个篇章springboot原理,主要偏向于底层原理! 今天主要有三个部分
1.配置优先级
2.Bean的管理
3.剖析Springboot的底层原理
1.配置优先级
SpringBoot项目中支持三种配置文件:
-
application.properties
-
application.yml
-
application.yaml 我们想要配置一个属性,可以通过这三种方式任意一种来配置都可以,那么如果项目中同时出现这三种配置,且配置了同一个属性,如:Tomcat端口号,到底哪一份配置文件生效呢?
-
application.properties
ini
server.port=8081
- application.yml
yaml
server:
port: 8082
- application.yaml
yaml
server:
port: 8083
这三个端口号同时配置,并启动后,会发现properties优先级最高,其次是yml,最后是yaml
注意事项:在项目开始时,推荐统一使用一种配置格式(yml是主流)
除了上面三种配置文件外,SpringBoot为了增强程序的扩展性,还支持另外两种常见配置方式
- Java系统属性配置(格式: -Dkey=value)
ini
-Dserver.port=9000
- 命令行参数(格式:--key=value)
ini
--server.port=10010
Java系统属性 和命令行参数指定步骤:
编辑启动程序的配置信息
打开之后,选择 Modify options,选择 Add VM options,Program arguments
重启服务,同时配置Tomcat端口(application.properties,系统属性,命令行参数),测试哪个Tomcat端口号生效:
说明命令行参数优先级最高。
删除命令行参数:

五种配置方式的优先级: 命令行参数 > 系统属性参数 > properties参数 > yml参数 > yaml参数
项目打包上线后,我们设置Java系统属性和命令行参数:
ini
java -Dserver.port=9000 -jar XXXXX.jar --server.port=10010
1.执行maven打包指令package,把项目打成jar文件

2.使用命令:java -jar 方式运行jar文件程序 同时设置Java系统属性 和命令行参数

2.Bean的管理
我们可以通过Spring当中提供的注解@Component以及它的三个衍生注解(@Controller,@Service,@Repository) 来声明IOC容器中的bean对象,同时我们也学习了如何为应用程序注入运行时所需要的依赖和bean对象,也就是依赖注入DI IOC容器中Bean的其他使用细节, 1.bean的作用域配置 2.管理第三方的bean对象
Bean的作用域
默认bean对象是单例的(只有一个实验对象),在Spring中支持物种作用域,后三种在web环境才生效:
作用域 | 说明 |
---|---|
singleton | 容器内同名称的bean只有一个实例(单例)(默认) |
protoype | 每次使用该bean时会创建新的实例(非单例) |
request | 每个请求范围内会创建新的实例 (web环境中,了解) |
session | 每个会话范围内创建新的实例(web环境中,了解) |
application | 每个应用范围内会创建新的实例 (web环境中,了解) |
我们可以借助Spring中的@Scope注解来进行配置作用域

第三方bean
之前我们配置的bean都是写了@Component 以及衍生注解@Controller @Service @Repository 就可以声明bean对象了 但是项目开发中,还有一种情况就是这个类不是我们编写的,而我们引入的第三方依赖提供,那么此时我们是无法使用@Component以及衍生注解来声明bean,此时就需要@Bean来声明bean了
· 在启动类中直接生命这个Bean,比如:我们可以将我们之前使用的阿里云OSS操作的工具类,基于@Bean注解的方式来声明Bean。
typescript
import com.itheima.utils.AliyunOSSOperator;
import com.itheima.utils.AliyunOSSProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
@ServletComponentScan
@EnableScheduling
@SpringBootApplication
public class TliasWebManagementApplication {
public static void main(String[] args) {
SpringApplication.run(TliasWebManagementApplication.class, args);
}
@Bean
public AliyunOSSOperator aliyunOSSOperator(AliyunOSSProperties ossProperties) {
return new AliyunOSSOperator(ossProperties);
}
}