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注解
相关推荐
小白冲鸭21 分钟前
【报错解决】使用@SpringJunitConfig时报空指针异常
spring·java后端开发
沈询-阿里32 分钟前
java-智能识别车牌号_基于spring ai和开源国产大模型_qwen vl
java·开发语言
AaVictory.38 分钟前
Android 开发 Java中 list实现 按照时间格式 yyyy-MM-dd HH:mm 顺序
android·java·list
LuckyLay1 小时前
Spring学习笔记_27——@EnableLoadTimeWeaving
java·spring boot·spring
Stringzhua1 小时前
【SpringCloud】Kafka消息中间件
spring·spring cloud·kafka
向阳12181 小时前
Dubbo负载均衡
java·运维·负载均衡·dubbo
Gu Gu Study1 小时前
【用Java学习数据结构系列】泛型上界与通配符上界
java·开发语言
WaaTong2 小时前
《重学Java设计模式》之 原型模式
java·设计模式·原型模式
m0_743048442 小时前
初识Java EE和Spring Boot
java·java-ee
AskHarries2 小时前
Java字节码增强库ByteBuddy
java·后端