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注解
相关推荐
Q_9709563910 分钟前
java+vue+SpringBoo校园失物招领网站(程序+数据库+报告+部署教程+答辩指导)
java·数据库·vue.js
Wyc7240918 分钟前
Maven
java·数据库·maven
程序猿小D20 分钟前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的电影小说网站管理系统,推荐!
java·数据库·mysql·spring·毕业设计·ssm框架·电影小说网站
CodeWithMe1 小时前
【Note】《深入理解Linux内核》 Chapter 15 :深入理解 Linux 页缓存
linux·spring·缓存
木头没有瓜2 小时前
idea离线安装插件
java·ide·intellij-idea
llwszx2 小时前
Spring中DelayQueue深度解析:从原理到实战(附结构图解析)
java·后端·spring·delayqueue·延迟任务
述雾学java2 小时前
Spring Cloud Feign 整合 Sentinel 实现服务降级与熔断保护
java·spring cloud·sentinel
保持学习ing2 小时前
苍穹外卖day3--公共字段填充+新增菜品
java·阿里云·实战·springboot·前后端·外卖项目·阿里云文件存储
77qqqiqi2 小时前
正则表达式
java·后端·正则表达式
厦门德仔3 小时前
【WPF】WPF(样式)
android·java·wpf