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);
    }
}
相关推荐
m0_639906941 小时前
Linux 操作系统入门:目录结构、服务排查常用命令、Shell 脚本基础
linux·运维·后端
holly就是我2 小时前
AI 编程助手为什么跑偏?用开源 ccglass 看清 Prompt、工具调用和 Token 消耗
人工智能·后端
鸿蒙开发2 小时前
共享 Schema 与 SchemaFactory
前端·后端·harmonyos
用户788477316342 小时前
小程序后端三选一:云开发、.NET WebAPI、Node,我按客户现状分了三种答案
后端
aiopencode2 小时前
局域网设备抓包怎么做?用 TraceEagle 抓电视、游戏机和 IoT 流量
后端·ios
智驭未来掌门人2 小时前
CLion 开发 Qt 项目的优势
后端
EnCi Zheng2 小时前
后端怎么把AI接口稳定安全低成本接进业务:超时重试、密钥隔离与成本熔断清单
人工智能·后端·安全·架构·api
Bazingga2 小时前
从一家酒店讲懂Docker
后端
南归北隐2 小时前
Spring AI Alibaba Graph框架实现MCP数据库查询实战
java·后端·spring ai·mcp·spring ai mcp
IT_陈寒2 小时前
刚解决一个 Java 并发问题,这坑踩得我怀疑人生
前端·人工智能·后端