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);
    }
}
相关推荐
吴佳浩3 小时前
Python入门指南(六) - 搭建你的第一个YOLO检测API
人工智能·后端·python
踏浪无痕4 小时前
JobFlow已开源:面向业务中台的轻量级分布式调度引擎 — 支持动态分片与延时队列
后端·架构·开源
Pitayafruit4 小时前
Spring AI 进阶之路05:集成 MCP 协议实现工具调用
spring boot·后端·llm
ss2734 小时前
线程池:任务队列、工作线程与生命周期管理
java·后端
不像程序员的程序媛5 小时前
Spring的cacheEvict
java·后端·spring
踏浪无痕5 小时前
JobFlow 实战:无锁调度是怎么做到的
后端·面试·架构
shoubepatien5 小时前
JAVA -- 11
java·后端·intellij-idea
喵个咪5 小时前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:kratos-bootstrap 入门教程(类比 Spring Boot)
后端·微服务·go
uzong5 小时前
从大厂毕业后,到小公司当管理,十年互联网老兵的思维习惯阶段复盘
后端
追逐时光者5 小时前
一个 WPF 开源、免费的 SVG 图像查看控件
后端·.net