SpringBoot原理

今天我学习了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为了增强程序的扩展性,还支持另外两种常见配置方式

  1. Java系统属性配置(格式: -Dkey=value)
ini 复制代码
 -Dserver.port=9000
  1. 命令行参数(格式:--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);
    }
}
相关推荐
geovindu14 小时前
go: Monitor Pattern
开发语言·后端·设计模式·golang·监控模式
ZHOUPUYU14 小时前
PHP 开发实战:从零搭建一个高性能的 RESTful API 服务
运维·开发语言·后端·html·php
身如柳絮随风扬14 小时前
除了 JWT,你还用过哪些认证方案?Spring Security 中如何集成 JWT?
java·后端·spring
techdashen14 小时前
Rust 能帮你捕获什么,又不能捕获什么
开发语言·后端·rust
YOU OU14 小时前
Spring MVC 练习项目
java·后端·spring
Spider Cat 蜘蛛猫1 天前
Springboot SSO系统设计文档
java·spring boot·后端
zyk_computer1 天前
AI 时代,或许 Rust 比 Python 更合适
人工智能·后端·python·ai·rust·ai编程·vibe coding
雨辰AI1 天前
SpringBoot3 项目国产化改造完整流程|从 MySQL 到人大金仓落地
java·数据库·后端·mysql·政务
GreenTea1 天前
【Rust 2026教程:从零构建 Mini-OLAP 引擎】第 6 章 Benchmark 与优化路线图
后端
Rust语言中文社区1 天前
【Rust日报】2026-05-14 Pyrefly v1.0 正式发布:快速的 Python 类型检查器和语言服务器
开发语言·后端·python·rust