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注解
相关推荐
我不是程序猿儿1 小时前
【C#】 lock 关键字
java·开发语言·c#
tmacfrank2 小时前
网络编程中的直接内存与零拷贝
java·linux·网络
weixin_472339463 小时前
Maven 下载安装与配置教程
java·maven
Magnum Lehar4 小时前
3d游戏引擎EngineTest的系统实现3
java·开发语言·游戏引擎
就叫飞六吧4 小时前
Spring Security 集成指南:避免 CORS 跨域问题
java·后端·spring
Mcworld8574 小时前
java集合
java·开发语言·windows
天黑请闭眼4 小时前
IDEA:程序编译报错:java: Compilation failed: internal java compiler error
java·intellij-idea
苍煜5 小时前
Maven构建流程详解:如何正确管理微服务间的依赖关系-当依赖的模块更新后,我应该如何重新构建主项目
java·微服务·maven
冼紫菜5 小时前
[特殊字符]CentOS 7.6 安装 JDK 11(适配国内服务器环境)
java·linux·服务器·后端·centos
isyangli_blog5 小时前
(1-4)Java Object类、Final、注解、设计模式、抽象类、接口、内部类
java·开发语言