SprigBoot中的配置优先级& Bean管理

黑马程序员JavaWeb开发教程

文章目录

  • 一、配置优先级
    • [1.1 SpringBoot 中支持三种格式的配置文件](#1.1 SpringBoot 中支持三种格式的配置文件)
    • [1.2 Java系统属性 & 命令行参数](#1.2 Java系统属性 & 命令行参数)
    • [1.3 总结](#1.3 总结)
  • 二、Bean管理
    • [2.1 获取bean](#2.1 获取bean)
      • [2.1.1 在默认情况下](#2.1.1 在默认情况下)
    • [2.2 bean 作用域(实际开发中一般不需要考虑)](#2.2 bean 作用域(实际开发中一般不需要考虑))
      • [2.2.1 bean的作用域](#2.2.1 bean的作用域)
      • [2.2.2 配置bean的作用域](#2.2.2 配置bean的作用域)
      • [2.2.3 注意事项](#2.2.3 注意事项)
    • [2.3 第三方bean](#2.3 第三方bean)
      • [2.3.1 @Bean](#2.3.1 @Bean)
      • [2.3.2 注意事项](#2.3.2 注意事项)
      • [2.3.3 @Component 及衍生注解与@Bean 注解使用场景](#2.3.3 @Component 及衍生注解与@Bean 注解使用场景)

一、配置优先级

1.1 SpringBoot 中支持三种格式的配置文件

  1. 三种格式配置文件:

    • application.properties server.port=8080
    • application.yml
    • application.yaml

    server:
    port: 8080

  2. 他们的优先级从左到右依次降低

  3. 注意事项:在项目开发式推荐同意使用一种格式的配置(yml是主流)

1.2 Java系统属性 & 命令行参数

  • 命令行参数的优先级高于Java系统属性
  1. Java系统属性

    -Dserver.port=8080

  2. 命令行参数

    --server.port=8080

  3. 使用方法

    • 执行Maven打包指令package 得到一个打包好的项目
    • 执行Java指令运行 jar包

    java -Dserver.port=8080 -jar tlias-web-management-0.0.1-SNAPSHOT.jar

    java -jar tlias-web-management-0.0.1-SNAPSHOT.jar --server.port=8080

1.3 总结

命令行参数 > Java系统属性 > application.properties > application.yml > application.yaml

二、Bean管理

2.1 获取bean

2.1.1 在默认情况下

  • spring项目启动时,会把bean都创建好放在IOC容器中,如果想要主动获取这些bean,可以通过如下方式
  1. 根据name获取bean:Object getBean(String name)
  2. 根据类型获取bean:
    <T> T getBean(Class<T> requiredType)
  3. 根据name获取bean(带类型转换):<T> T getBean(String name,Class<T> requiredType)
  • 上述所说的【spring项目启动时,会把bean都创建好】还会收到作用域及延迟初始化影响,这里主要针对于默认的单例非延迟加载的bean而言

2.2 bean 作用域(实际开发中一般不需要考虑)

2.2.1 bean的作用域

  • Spring 支持五种作用域,后三种在web环境才生效

2.2.2 配置bean的作用域

  • 可以通过 @Scope 注解来配置bean的作用域

2.2.3 注意事项

  1. 默认 singleton 的bean,在容器启动时被创建,可以使用 @Lazy 注解来延迟初始化(延迟到第一次使用时)
  2. protoType的bean,每一次使用该bean的时候都会创建一个新的实例
  3. 实际开发中,绝大部分Bean是单例的,也就是说绝大部分bean不需要配置scope属性

2.3 第三方bean

2.3.1 @Bean

  1. 如果要管理的bean对象来自于第三方(不是自定义的),是无法用@Component及衍生注解声明bean的,就需要用到@Bean注解。【下例是直接在启动类中管理第三方bean对象了,不推荐】

  2. 若要管理第三方bean对象,建议对这些bean进行集中分类配置,可以通过@Configuration注解声明一个配置类

2.3.2 注意事项

  1. 通过@Bean注解的name或者value属性,可以声明bean的名称,如果不指定,那么bean的名称默认就是方法名
  2. 如果第三方bean需要依赖其他的bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配

2.3.3 @Component 及衍生注解与@Bean 注解使用场景

  1. 项目中自定义的,使用@Component及其衍生注解
  2. 项目中引入第三方的,使用@Bean注解
相关推荐
oak隔壁找我1 小时前
JVM常用调优参数
java·后端
蝎子莱莱爱打怪5 小时前
OpenClaw 从零配置指南:接入飞书 + 常用命令 + 原理图解
java·后端·ai编程
狼爷7 小时前
Go 没有 override?别硬套继承!用接口+嵌入,写更清爽的“覆盖”逻辑
java·go
小兔崽子去哪了9 小时前
Java 自动化部署
java·后端
ma_king9 小时前
入门 java 和 数据库
java·数据库·后端
后端AI实验室10 小时前
我用Cursor开发了3个月,整理出这套提效4倍的工作流
java·ai
码路飞14 小时前
GPT-5.3 Instant 终于学会好好说话了,顺手对比了下同天发布的 Gemini 3.1 Flash-Lite
java·javascript
SimonKing14 小时前
OpenCode AI编程助手如何添加Skills,优化项目!
java·后端·程序员
Seven9716 小时前
剑指offer-80、⼆叉树中和为某⼀值的路径(二)
java
怒放吧德德1 天前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty