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注解
相关推荐
Sylvia-girl3 小时前
Java——抽象类
java·开发语言
Touper.6 小时前
Redis 基础详细介绍(Redis简单介绍,命令行客户端,Redis 命令,Java客户端)
java·数据库·redis
m0_535064606 小时前
C++模版编程:类模版与继承
java·jvm·c++
虾条_花吹雪7 小时前
Using Spring for Apache Pulsar:Message Production
java·ai·中间件
tomorrow.hello7 小时前
Java并发测试工具
java·开发语言·测试工具
Moso_Rx7 小时前
javaEE——synchronized关键字
java·java-ee
张小洛7 小时前
Spring AOP 是如何生效的(入口源码级解析)?
java·后端·spring
DKPT7 小时前
Java设计模式之行为型模式(观察者模式)介绍与说明
java·笔记·学习·观察者模式·设计模式
追风少年浪子彦8 小时前
mapstruct与lombok冲突原因及解决方案
java·spring boot·spring·spring cloud
军军君018 小时前
基于Springboot+UniApp+Ai实现模拟面试小工具四:后端项目基础框架搭建下
spring boot·spring·面试·elementui·typescript·uni-app·mybatis