[Spring]Spring容器扩展点

spring扩展点六:监听spring容器刷新事件 在spring初始化的流程中,会发送一个容器刷新事件 阅读详情

假如我们要扩展Spring IoC容器,比如对某些bean后续处理,通常来说,我们并不需要去继承ApplicationContext ,取而代之的是 我们依赖于Spring本身所提供的扩展点来扩展Bean的功能。


1.通过实现BeanPostProcessor接口,来扩展bean

public interface BeanPostProcessor {

	Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;


	Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;

}

该接口定义了两个方法,postProcessBeforeInitialization和postProcessAfterInitialization两个方法

before 和after 初始化 提供了两个切入点 ,让我有机会对bean进行深层次的扩展。

这两个方法的两个参数 第一个 传入的是  会在容器内初始的bean, 第二个参数是bean的名字



那么如何使用该接口呢?很简单,

我们先自己写一个简单的实现Processor 让他继承 BeanPostProcessor

public class BeanProcesser implements BeanPostProcessor{

	public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException {
		ExampleBean bean = null;
		if(arg1.equals("exampleBean")) {
			bean = (ExampleBean)arg0;
			System.out.println(bean.year);
			System.out.println(bean.ultimeateAnswer);
			bean.ultimeateAnswer += "world";			
		}
			return bean;
	}

	public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException {
		ExampleBean bean = null;
	if(arg1.equals("exampleBean")) {
		bean = (ExampleBean)arg0;
		System.out.println(bean.year);
		System.out.println(bean.ultimeateAnswer);
		bean.year = 1992;
	
	}
		return bean;
	}

	
	
}

这里看到 我们这里只处理exampleBean,初始化前,改变了year属性,初始化后再次改变了ultimeateAnswer

然后呢,我们只需要将这个BeanProcessor注册进配置

<bean class="com.spring.BeanProcesser"/>

这里什么都不指定没有任何关系,因为Spring会自动检测出类是否实现了该接口。然后将该处理器注册进spring容器。

这个时候我们自己实现的PostBeanProcessor就会将bean进行处理。

这里需要注意的事,如果通过@Bean注册Processor 那么工厂类必须实现PostBeanProcessor 否则无法检测到


第二个扩展点

2.BeanFactoryPostProcessor

该接口主要是可以修改bean的配置元数据,而而BeanPostProcessor不能而BeanPostProcessor不能

BeanFactoryPostProcessor只定义了一个方法

void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
同样的道理,只要实现该类,然后注册进Spring 配置 就好。

public class FactoryProcessor implements BeanFactoryPostProcessor {

	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
		BeanDefinition bd =	beanFactory.getBeanDefinition("exampleBean");
		MutablePropertyValues pv = bd.getPropertyValues();  
        if(pv.contains("year"))  
        {  
            pv.addPropertyValue("ultimeateAnswer", "nothing ");  
        }  
		
	}

}

配置文件如下

<bean class="com.spring.FactoryProcessor"/>

这样就可以很简单的重新更改bean的定义了

保姆级教程:用Qlib和LightGBM从零搭建你的第一个AI量化选股策略(附完整代码) 本文提供了一份详细的教程,教你如何使用Qlib和LightGBM从零搭建AI量化选股策略。教程涵盖了环境配置、数据获取、特征工程、模型训练和策略回测等关键步骤,并附有完整代码和常见问题解决方案,适合量化投资初学者快速上手。 阅读详情

相关推荐

C#实战:如何用winmm.dll打造毫秒级高精度定时器(附完整代码)

本文详细介绍了在C#中利用winmm.dll实现毫秒级高精度定时器的完整方案。针对.NET内置定时器精度不足的问题,通过调用timeSetEvent等原生API,提供了超越系统时钟中断周期的精准定时能力。文章包含核心原理剖析、完整的封装类代码以及音视频处理、游戏开发等场景下的实战应用与性能调优指南。

ujm5678901的博客 690

Springboot启动扩展点超详细总结,再也不怕面试官问了

1.背景 Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引用了一个依赖,几乎是零配置就能完成一个功能的装配。 我非常喜欢这种自动装配的机制,所以在自己开发中间件和公共依赖工具的时候也会用到这个特性。让使用者以最小的代价接入。想要把自动装配玩的转,就必须要了解spring对于bean的构造生命周期以及各个扩展接口。当然了解了bean的各个生命周

元人部落 1709

RAGFlow 离线部署:解决cl100k_base.tiktoken问题

摘要 本文详细解决了RAGFlow离线部署时tiktoken缓存文件下载失败的问题。通过分析tiktoken库的缓存机制,一次性不改代码解决.

baidu_25691461的博客 830

超详细Spring、SpringBoot所有扩展点整理

最后附上一张流程图,在bean生命周期的各个位置的扩展点,bean是spring关键的功能,所以主要扩展点也都在bean的生命周期上。这就是Spring和SpringBoot所有的扩展点,如果有遗漏欢迎留言告知,我们会后续补充~-另外因为ComponentScan是发生在refresh阶段的,也就是说如果在此阶段前尝试去获取bean是无法拿到我们自己引入该类型的bean,也就是实现会无法应用,但我们可以通过Spring.factories文件配置,因为部分组件会在启动时候去扫描获取。

ZhangASen的博客 2561

1、STVD和STVP的使用及串口烧写程序教程

文章目录一、前述二、STVD的使用三、STVP的使用1、STVP的作用:2、STVP的使用四、串口烧录程序 一、前述 STVD是意法半导体推出的,可以支持STM8和STM32 而IAR不尽如此,还支持51,MSP430等芯片 软件开发环境:编写程序,调试软件功能,下载固件到单片机中 硬件开发环境:连接外围电路,驱动功能外设,实现电气功能 最终构成一个以STM8系列单片机作为控制核心的应用系统。 MCS-51 一般的开发环境是 IAR 和 Keil STM8 一般的开发环境是 IAR 和 ST

Clichong 1万+

HTB_Bike靶机之模板注入

船到桥头自然直 文章目录信息收集模板引擎SSIT 模板注入后放答案 信息收集 日常 A 扫描,两个端口 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 48:ad:d5:b8:3a:9f:bc:be:f7:e8:20:1e:f6:bf:de:ae (RSA) | 256 b7:89:6c:0b:20:ed:49:b2:c1:86:7c:.

网络安全学习 797

Spring的扩展点及实例

本文介绍的spring扩展点都是基于spring中bean的生命周期扩展的。专用扩展点比较简单,这里只说通用扩展点。

ludkjava的博客 1049

Node.js内存溢出?一招搞定JavaScript heap out of memory错误(附永久配置方案)

本文深入解析Node.js内存溢出问题,提供从临时调整到永久配置的完整解决方案。重点介绍通过设置`max-old-space-size`参数和`NODE_OPTIONS`环境变量来扩展JavaScript堆内存限制,适用于Webpack、Vite等构建工具的大型项目场景,并涵盖Windows、Linux/macOS多平台配置方法。

cake8的博客 1054

Spring 容器有哪些拓展点?

实现 BeanPostProcessor 接口,自定义回调方法,可以实现(或覆盖容器的默认)实例化逻辑、依赖关系解析逻辑等等的自定义。如果你想在 Spring 容器完成 bean 的实例化、配置和初始化之后实现一些自定义逻辑,那么你可以通过实现 BeanPostProcessor 接口,插入一个或多个自定义的 BeanPostProcessor 实现。// 后置处理器,是在 Bean 被实例化、属性赋值后,实现一些自定义逻辑。Bean 的生命周期。

swadian2008的博客 569

C#:WPF格式转Winform格式

WPF格式转Winform格式

Hello C++ 1295

SAP FICO应付票据平台开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP FICO应付票据平台开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

我好像病了的博客 378

基于spring的可扩展性

从一个日志功能开始说起 #### v1.0 : spring aop 实现日志 #### 代码示例: @Aspect @Deprecated public class MysqlLogAspect { private static final Logger log = LoggerFactory.getLogger(MysqlLogAspect.class); @Around("e

xujieyang4j的博客 1978

《手把手教你玩转RTOS操作系统》专栏简介

《手把手教你玩转RTOS操作系统》专栏系统讲解实时操作系统开发,以FreeRTOS为主线,结合RT-Thread和Zephyr对比分析。内容涵盖RTOS基础、任务管理、通信机制、中断处理等核心知识,并配套STM32/ESP32平台实战项目。专栏特色在于零基础友好、实战驱动、多系统对比和行业趋势分析,适合嵌入式开发者进阶RTOS开发能力,解决实际项目中的选型与优化问题。通过完整学习路径,读者可掌握构建高可靠性嵌入式系统的关键技能。

MHD0815的博客 530

Spring容器扩展点

Spring容器扩展带点

zhujilisa的博客 843

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【SpringBoot笔记13】Spring容器提供的扩展点

参考:官方文档 1 容器扩展点 通常,开发者不需要去实现ApplicationContext接口,Spring提供了很多接口用于扩展容器的功能。 1.1 BeanPostProcessor接口 BeanPostProcessor接口定义了回调方法,您可以实现这些方法来提供自己的(或覆盖容器的默认)实例化逻辑、依赖项解析逻辑,等等。如果您想在Spring容器完成bean的实例化、配置和初始化之后...

西瓜游侠的博客 1735

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Spring容器扩展点(Container Extension Points)

容器扩展点的概念 &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Spring的IoC部分被设计成可扩展的。应用程序开发者通常不需要继承各种各样的BeanFactory或者ApplicationContext的实现类(BeanFactory和ApplicationContext都是接口)。通过插入(plug

码农无双的博客 4988

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring系列14:IoC容器的扩展点

Spring系列14:IoC容器的扩展点 回顾 知识需要成体系地学习,本系列文章前后有关联,建议按照顺序阅读。上一篇我们详细介绍了Spring Bean的生命周期和丰富的扩展点,没有阅读的强烈建议先阅读。本篇来详细讲讲容器提供的扩展点,完整的生命周期图镇楼。 本文内容 详解BeanPostProcessor 详解BeanFactoryPostProcessor 详解FactoryBean 详解BeanPostProcessor 作用和定义 常规 BeanPostProcessor 的作用是提供自定义的

qq_21579619的博客 543

译 - Spring 核心技术之 Spring 容器扩展点

前言 本文内容选自 Spring Framework 5.1.6.RELEASE 官方文档中 core 部分的 1.8 小节,简单介绍了如何利用 Spring 容器扩展点进行定制化扩展,以及注意点。若有任何问题,欢迎交流。 原文地址:docs.spring.io/spring/docs… 正文 1.8. Spring 容器扩展点 通常,一位应用开发者不需要继承 ApplicationConte...

weixin_33881140的博客 232

Spring容器深度扩展点:postProcessBeanFactory详解

Spring容器的postProcessBeanFactory是启动流程中关键的扩展点,位于BeanFactory初始化后、Bean定义加载前,为开发者提供了深度定制容器的能力。该扩展点支持注册自定义作用域、特殊依赖解析和环境敏感配置等高级功能,是Spring MVC、Spring Boot等框架的核心扩展机制。

张小洛的BOLG 687

【Ioc 容器的扩展点】有哪些扩展点呢?Spring 如何调用到这些扩展点的?让 Bean 对象有一定的扩展性!

对 Spring 的 Ioc 容器来说,主要有:BeanFactoryPostProcessor, BeanPostProcessor。他们分别是在构建 BeanFactory 和构建 Bean 对象时调用。还有就是 InitializingBean 和 DisposableBean, 他们分别是在 Bean 实例创建和销毁时被调用。用户可以实现这些接口中定义的方法,Spring 就会在适当的时候...

qfzhangwei的专栏 562

Spring容器启动的隐藏关卡:onRefresh()扩展点深度解析

Spring容器启动过程中的onRefresh()方法是一个关键但易被忽视的扩展点,位于核心基础设施初始化后、单例Bean实例化前,为子类容器(如Web或响应式应用)提供专属初始化入口。

张小洛的BOLG 1130

Spring5中文文档【6】IOC容器之容器扩展点

前言 本系列基于最新5.3.10版本,大部分内容copy于官方文档… 官方文档地址 内容较杂,建议粗略过一遍,熟悉下概念即可,后续结合实际开发详解。 1. 容器扩展点 通常,应用程序开发人员不需要对ApplicationContext 实现类进行子类化。相反,可以通过插入特殊集成接口的实现来扩展 Spring IoC 容器。接下来的几节将描述这些集成接口。 1.1 通过使用自定义 Bean(BeanPostProcessor) 该BeanPostProcessor接口定义了回调方法,您可以实现这些方法以提

记录知识、锤炼自我 520

Spring:IoC容器的扩展点

Spring系列14:IoC容器的扩展点 回顾 知识需要成体系地学习,本系列文章前后有关联,建议按照顺序阅读。上一篇我们详细介绍了Spring Bean的生命周期和丰富的扩展点,没有阅读的强烈建议先阅读。本篇来详细讲讲容器提供的扩展点,完整的生命周期图镇楼。 本文内容 BeanFactoryPostProcessor FactoryBean 详解BeanPostProcessor 作用和定义 常规 BeanPostProcessor 的作用是提供自定义的实例化逻辑、初始化逻辑、依赖关系

HongYu012的博客 210

Spring【三】容器与Bean扩展点

一、容器与Bean的扩展点 Spring提供了容器层级和类层级的扩展,在Bean被初始化或销毁等不同生命周期进行功能的扩展。 在容器层级,Spring提供接口BeanFactoryPostProcessor和BeanPostProcessor,用于容器实例化每个Bean的前后进行功能的扩展; 在类层级,可以通过配置init-method和destory-method(或使用相应的注解)等方式来进行回调,实现Bean在初始化和销毁时的功能扩展。 1.全局与容器生命周期回调 Bean在容器中的基本生命周

风继续吹 688

架构师必须掌握的知识——spring容器扩展点

架构师必须掌握的知识——spring容器扩展点 写作意图 spring作为目前最为主流的框架,能掌握它的各个知识点是必不可少的技能,有些知识在业务代码中不经常使用,但在框架开发时会经常用到。这篇文章的知识就是如此,希望这篇文章能起到夯实基础的作用。本人能力有限,理解不当的地方在所难免,希望各位看官指正。 文章阅读建议 文章遵循带着问题阅读的方式,这样能深刻掌握知识。文章会先抛出要解决的问题,引导思...

guduyishuai的博客 728

Spring系列12:IoC容器的扩展点

知识需要成体系地学习,本系列文章前后有关联,建议按照顺序阅读。上一篇我们详细介绍了Spring Bean的生命周期和丰富的扩展点,没有阅读的强烈建议先阅读。本篇来详细讲讲容器提供的扩展点,完整的生命周期图镇楼。作用和定义常规 BeanPostProcessor 的作用是提供自定义的实例化逻辑、初始化逻辑、依赖关系解析逻辑等,对bean进行增强。主要的作用阶段是初始阶段前后。该接口定义了2接口,分别是前置增强和后置增强。 Spring AOP 功能主要是通过 BeanPostProcessor 实现的。 自定

Joe192的博客 357
上一篇: [Spring]Spring Bean的初始化 ---- getBean方法
下一篇: [Spring]<context:annotation-config/>注册的BeanPostProcessor
HeapStackk
博客等级 码龄12年 11粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值