14、容器初始化器和配置环境后处理器

news2024/11/9 2:19:36

容器初始化器和配置环境后处理器

容器初始化器

与传统Spring的容器后处理器(也可对容器做一些定制)对比,此处的容器初始化器的执行时机要更早一些。
容器初始化器负责可对Spring容器执行初始化定制。
就是在启动项目的时候,在容器初始化器中可以编写一些业务逻辑,能在项目启动主配置类的时候快速初始化。

创建容器初始化的步骤:

步骤1: ApplicationContextInitializer接口的实现类被称为容器初始化器,该接口中initialize(C ctx)方法可对Spring容器进行设置

步骤2、 注册初始化器(有两种方法):

  • 方法1: 调用SpringApplication的addInitializers()或SpringApplicationBuilder的initializers()方法添加初始化器。
  • 方法2: 使用META-INF/spring.factories文件来配置初始化器。在该文件中添加如下代码即可注册初始化器

代码如下:
在这里插入图片描述

★ 配置环境后处理器:

  • 什么是配置环境后处理器:
    配置环境后处理器(EnvironmentPostProcessor)是Spring框架中的一个接口,用于在Spring容器加载配置环境完成之后,对配置进行进一步处理和修改。
    就是当springboot项目启动之后,【配置环境】加载创建出来后,这个【EnvironmentPostProcessor接口的实现类】就会对这些配置环境进行后处理,就是对这些配置环境进行一些额外的定制。
    定制:就是一些添加、修改的操作。比如让springboot额外加载我们自定义的一些配置文件。

  • 什么是“配置环境”:
    Spring Boot提供了Enviroment来代表配置环境。
    Enviroment 就代表了通过 application.properties | yml (及其他类似配置方式,包括环境变量、系统参数、命令行参数等)所提供的全部的配置信息的总和。这些配置就统称为 配置环境
    就是启动一个项目后,springboot会自动加载各种配置文件,各种配置文件总和就叫做配置环境。

▲ 步骤:

(1)EnvironmentPostProcessor接口的实现类被称为配置环境后处理器,

    该接口中postProcessEnvironment()方法可对Environment进行设置。
    Environment提供了一个getPropertySources(),该方法可返回。

 (2)注册初始化器:

  - 使用META-INF/spring.factories文件来配置环境后处理器。在该文件中添加如下代码即可注册初始化器。
   org.springframework.boot.env.EnvironmentPostProcessor=\
   cn.ljh.boot.custom.myEnvironmentProcessor

代码示例:

1、先定义一个配置环境后处理器的类。
这个类的作用就是让我们自定义的配置文件生效。
让springboot项目在启动并加载完成默认的各种配置文件之后,额外加载我们自定义的配置文件。
在这里插入图片描述
2、创建自定义的【配置环境后处理器】配置文件。
在这里插入图片描述

3、这一步的作用就是让springboot容器在加载的时候会去加载这个myEnvironmentProcessor类。
创建好【配置环境后处理器】这个myEnvironmentProcessor类和myEnvironment.properties配置文件后,需要将这个类注册到resources 包下面的META-INF 里面的 spring.factories 配置文件里面。
spring.factories 这个配置文件就是用来做注册的,注册一些文件。
在这里插入图片描述

4、测试【配置环境后处理器】的配置文件是否生效,可以通过以下操作。

在Dog类的属性字段里面,通过@Value注解,看能不能把自定义配置文件myEnvironment.properties里面的属性值 设置给Dog类里面的字段。
在这里插入图片描述

执行启动类,发现springboot把自己的一些默认的配置文件都加载完成后,最后才执行把自定义配置文件myEnvironment.properties 里面的属性的值设置到 Dog类里面的字段 的操作。
因为我们原本就是让这个myEnvironment.properties自定义配置文件排在springboot容器加载的最后时机才执行。
所以这个【配置环境后处理器】操作成功
在这里插入图片描述

总结:
1、把myEnvironmentProcessor类注册到spring.factories配置文件里面,springboot项目在启动的时候才会去加载这个类。
2、然后通过myEnvironmentProcessor类里面的一些自定义配置,让springboot在启动完自己默认的一些配置后,再按我们自己的要求,来加载我们自定义的配置文件myEnvironment.properties。
3、然后通过操作看我们自定义的配置环境后处理器是否生效。
(配置环境后处理器: 就是让我们自定义的配置文件在springboot启动的时候并且加载完自己的所有配置文件(所有配置文件称"配置环境")之后,再去额外执行加载这个自定义配置文件的操作。)

在回顾一次:
配置环境后处理器:就是在Spring容器加载配置环境完成之后,对配置进行进一步处理和修改的操作。
我觉得也可以叫做配置环境后处理类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/819161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

eclipse版本与jdk版本对应关系

官网:Eclipse/Installation - Eclipsepedia eclipse历史版本(2007-):Older Versions Of Eclipse - Eclipsepedia Eclipse Packaging Project (EPP) Releases | Eclipse Packages

springboot疾病查询网站【纯干货分享,免费领源码01548】

spring boot疾病查询网站 摘 要 随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的疾病查询网站,会使疾病查询工作系统化、规范化,也会提高医院形象&#xff0c…

红外雨量计(光学雨量传感器)检测降雨量,预防内涝

红外雨量计(光学雨量传感器)检测降雨量,预防内涝 随着城市化进程的加快,城市内涝成为一个愈发严峻的问题。短时间内大量的降雨,不仅会给城市交通带来困难,也会对城市的基础设施和居民的生活造成很大的影响…

ESP32cam系列教程003:ESP32cam实现远程 HTTP_OTA 自动升级

文章目录 1.什么是 OTA2. ESP32cam HTTP_OTA 本地准备2.1 HTTP OTA 升级原理2.2 开发板本地基准程序(程序版本:1_0_0)2.3 开发板升级程序(程序版本:1_0_1)2.4 本地 HTTP_OTA 升级测试2.4.1 本地运行一个 HT…

Spring系列二:基于注解配置bean

文章目录 💗通过注解配置bean🍝基本介绍🍝快速入门🍝注意事项和细节 💗自己实现Spring注解配置Bean机制🍝需求说明🍝思路分析🍝注意事项和细节 💗自动装配 Autowired&…

谷粒商城第八天-商品服务之品牌管理的整体实现(直接使用逆向生成的代码;含oss文件上传)

目录 一、总述 二、前端部分 2.1 创建好品牌管理菜单 2.2 复制组件 ​编辑2.3 复制api ​​​编辑 2.4 查看效果 ​编辑2.5 需要优化的地方 2.6 具体优化实现 2.6.1 优化一:将表格的状态列(这里是是否显示列)修改为开关&#xff…

Day15-作业(Maven高级)

作业1:完成苍穹外卖项目目录结构创建 说明: 1.sky-take-out 是父工程 2.sky-common/sky-pojo/sky-server 是子工程 3.sky-server模块引用了sky-common/sky-pojo模块 作业2:完成汇客CRM项目目录结构创建 说明: huike-paren…

判断变量是否为标量(没有维度,单个数值)numpy.isscalar()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 判断变量是否为标量 (没有维度,单个数值) numpy.isscalar() [太阳]选择题 请问关于以下代码表述错误的是? import numpy as np a 0 b np.array([0]) pri…

六、初始化和清理(3)

本章概要 成员初始化构造器初始化 初始化的顺序静态数据的初始化显式的静态初始化非静态实例初始化 成员初始化 Java 尽量保证所有变量在使用前都能得到恰当的初始化。对于方法的局部变量,这种保证会以编译时错误的方式呈现,所以如果写成&#xff1a…

初识Java - 概念与准备

本笔记参考自: 《On Java 中文版》 目录 写在第一行 Java的迭代与发展 Java的迭代 Java的参考文档 对象的概念 抽象 接口 访问权限 复用实现 继承 基类和子类 A是B和A像B 多态 单根层次结构 集合 参数化类型 对象的创建和生命周期 写在第一行 作为一…

Charles抓包工具使用(一)(macOS)

Fiddler抓包 | 竟然有这些骚操作,太神奇了? Fiddler响应拦截数据篡改,实现特殊场景深度测试(一) 利用Fiddler抓包调试工具,实现mock数据特殊场景深度测试(二) 利用Fiddler抓包调试工…

pytorch-gpu 极简安装

1、进入pytoch官网:PyTorch 找到pytorch-gpu版本,看到CUDA11.8、11.7、CPU,这里我选择安装CUDA11.8 2、下载CUDA Toolkit:CUDA Toolkit 11.8 Downloads | NVIDIA Developer 3、下载CUDANN:cuDNN Download | NVIDIA D…

TCP拥塞控制详解 | 1. 概述

网络传输问题本质上是对网络资源的共享和复用问题,因此拥塞控制是网络工程领域的核心问题之一,并且随着互联网和数据中心流量的爆炸式增长,相关算法和机制出现了很多创新,本系列是免费电子书《TCP Congestion Control: A Systems …

基于Spring Boot的鲜花销售网站设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频: 基于Spring Boot的鲜花销售网站设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java springboot…

运算放大器(三):差分放大

一、定义 差分放大电路又称为差动放大电路,当该电路的两个输入端的电压有差别时,输出电压才有变动,因此称为差动。 二、电路结构 常用的差分放大电路如下 图1 所示, 图1 根据虚短和虚断可得:

C# Blazor 学习笔记(0):初识Blazor

文章目录 Blazor是什么适合人群 开始学习BlazorBlazor资源如何创建BlazorBlazor 基础知识介绍文件分布Razor和cshtml的区别Razor介绍 Blazor是什么 Blazor是微软推出的前端框架,有两种形式,以下以Blazor Server为主。具有一下特点 前端是用C#而不是JS前…

Linux编辑器 - vim使用

1.vim的基本概念 Vim是一个广泛使用的文本编辑器,它是在Unix和Linux系统中常用的命令行文本编辑器之一。 vim的主要三种模式 ( 其实有好多模式,目前掌握这 3 种即可 ), 分别是 命令模式 ( command mode )、 插入模式 &#xff0…

仿第八区分发封装打包系统源码教程-轻松打包app

这个是最新的修改优化,优化了一些小bug不能用的问题,具体什么就不讲了,用过的应该有知道的。 大致功能: 支持一键安卓打包,IOS免签、绿标!(几乎媲美原生) 拥有此款神器&#xff0…

AppCompatActivity.setContentView(与activity.setContentView区别)方法解读

AppCompatActivity.setContentView()与Activity.setContentView()主要的区别,Activity.setContentView直接将视图添加到Window上,AppCompatActivity.setContentView()借助AppCompatActivity的Delegate代理类,将要显示的视图加入到代理层视图&…

【网络原理】 (3) (网络层 IP协议 地址管理 路由选择 数据链路层 以太网 MTU 补充:DNS)

文章目录 网络层IP协议地址管理路由选择 数据链路层以太网MTU补充:DNS 网络层 IP协议 网络层的代表,IP协议. 4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4。4位头部长度(header length&…