• Spring处理器和Bean的生命周期

    • Spring处理器是对Bean对象的的开发可以对BeanDifinition进行操作,例如动态添加、修改BeanDefinition、动态修改Bean。,也可以在Bean对象创建后对Bean对象进行代理增强。

      • 注意:对于处理器要又一个正确的认知,必须要对Bean生命周期有一个良好的认知。

    • 两种处理器

      • Bean工厂后处理器

        • 实现方式:将BeanFactoryPostProcessor交给Spring容器管理,实现BeanFactoryPostProcessor接口,实现postProcessBeanFactory方法。

          • xml配置

          • 运行结果

        • 案例1:修改BeanDifinition对象达成狸猫换太子的效果

          • Bean工产后处理器类

          • 运行结果

        • 案例2:增加BeanDifinition对象,实现了动态注册。

          • Bean工厂后处理器类

          • 测试和结果

      • Bean后处理器

        • 在bean创建后对生效,可以对Bean进行是对象创建之后,缓存到singletonObjects单例池之前,对Bean初始化过程的操作,包括属性的填充,初始化方法的执行等。二次加工如动态代理。

          • 实现方式通过实现 BeanPostProcessor接口,实现其postProcessBeforeInitialization(在 Bean 初始化之前调用()和postProcessAfterInitialization(在 Bean 初始化之后调用)方法,

            • 实现案例:对Bean对象的代理增强

              • 实现BeanPostProcessor

              • Springxml文件配置

              • 测试结果

    • Bean对象的生命周期

      • 即:Bean对象实例化之后(反射创建出对象),到bean成为一个完整对象,最终存到singletonobjects中的过程。最终分为三个阶段。

        • Bean实例化阶段:Spring框架会取出BeanDefintion的信息进行判断当前Bean范围是否是延迟加载。是否FactoryBean等,在将BeanDefintion存放到BeanDefintionMap后,创建Bean对象之前,可以调用Bean工厂后处理器对其进行修改增加等操作。

        • Bean初始化方法阶段,通过对BeanDefintionMap进行遍历创建Bean对象,此时Bean对象还是个半成品,可以调用Bean后处理器对其进行Aop代理增强,此后还会执行自动义初始化方法inti-method方法等,该阶段是最具技术含量和复杂的阶段

        • 完成阶段:Bean成为了一个完成Spring Bean,被存储到单例池singleonObjects完成了Spring Bean的整个生命周期。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Framework源码解析——BeanFactory

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl1. BeanFactory 概述 BeanFactory 是 Spring IoC 容器的最基础接口,它定义了获取、配置和管理 Bean 的核心方法。它是 Spring 框架中容器体系的顶层接口之一&#…

C# 计算梯形面积和周长的程序(Program to calculate area and perimeter of Trapezium)

梯形是至少有一对边平行,其他两条边可以不平行的四边形。平行边称为梯形的底,其他两条边称为梯形的腿。平行边之间的垂直距离称为梯形的高。公式 : 梯形面积: 0.5 * (a b) * h梯形周长: a b c d例子: 输…

【计算机考研(408)- 数据结构】数组和特殊矩阵

数组和特殊矩阵 数组 数组的定义 数组是由n(n>1)个相同类型的数据元素构成的有限序列。每个数据元素称为一个数组元素,每个元素在n个线性关系中的序号称之为该元素的下标,下标的取值范围称为数组的维界。 数组是[[线性表]]的推广,一维数组…

Agent架构与工作原理:理解智能体的核心机制

Agent架构与工作原理:深入理解智能体的核心机制 AI Agent的核心组成部分 一个完整的AI Agent通常由以下几个核心模块组成: 1. 规划模块(Planning Module) 规划模块是Agent的"大脑",负责制定行动策略。它接收…

解决vscode中vue格式化后缩进太小的问题,并去除分号 - 设置Vetur tabSize从2到4,设置prettier取消分号semi

效果图 左边原来的,右边是设置后的效果 实现步骤 安装插件 Vetur 安装插件 prettier Vscode > 文件 > 首选项 > 设置 搜索vetur > 找到比较下面的“Vetur > Format > Options: Tab Size” > 设置缩进为4 在附近找到“Vetur > Format: De…

计算机发展史:电子管时代的辉煌与局限

在计算机的发展历程中,电子管时代犹如一颗璀璨的流星,短暂却耀眼。它接过了机械计算装置的接力棒,以电子管为核心元件,开启了计算机的电子化征程,为后续的计算机发展奠定了坚实的基础。这段从 20 世纪 40 年代到 50 年…

div和span区别

区别1区别2App.vue代码 <template><div class"container"><h1>&#x1f3af; DIV 和 SPAN 标签的区别演示</h1><!-- 第一部分&#xff1a;基本区别演示 --><section class"demo-section"><h2>&#x1f4e6; 1. …

channel_up和lane_up

一、channel_up 1.当aurora通道完成初始化&#xff0c;channel准备发送或者接收数据的时候拉高 2.channel_up属于协议的链路层 3.当所有的通道的lane_up都成功拉高&#xff0c;并且完成通道绑定channel bonding,就拉高channel_up二、lane_up 1.lane初始化成功后拉高&#xff1b…

GDPR合规团队协作软件:保障企业数据安全的关键

随着数据隐私问题日益成为全球关注的焦点&#xff0c;GDPR&#xff08;General Data Protection Regulation&#xff0c;通用数据保护条例&#xff09; 的实施成为企业在数据管理中的一项重要法律要求。特别是对于需要在团队之间协作并共享信息的企业来说&#xff0c;选择合规的…

【图像质量评价指标】信噪比(Signal-to-Noise Ratio,SNR)

文章目录一、基本定义二、判断图像信噪比是否过低&#xff08;经验值&#xff0c;仅供参考&#xff09;三、SNR与图像质量指标关系四、评估方法 代码复现 —— 评估一张图像的信噪比&#xff08;1&#xff09;有参考图像&#xff08;推荐&#xff09;&#xff08;2&#xff09…

Java 实现 TCP 一发一收通信

在网络编程中&#xff0c;TCP&#xff08;传输控制协议&#xff09;凭借其可靠传输的特性&#xff0c;成为需要确保数据完整性场景的核心选择。本文将基于一段 Java 代码实例&#xff0c;全面解析 TCP 单向通信的实现逻辑&#xff0c;帮助开发者掌握 TCP 编程的基础框架与底层原…

docker-compose启动前后端分离项目(单机)

&#x1f31f;docker-compose启动前后端 &#x1f4c1;准备文件 xzs-mysql.sql&#xff08;数据库脚本&#xff09;xzs-3.9.0.jar&#xff08;后端代码&#xff09;application-prod.yml&#xff08;后端配置文件&#xff09;entry.sh&#xff08;后端启动脚本&#xff09;exam…

有关Mysql数据库的总结

MySQL概念MySQL的理论知识概念数据库就是用来存储和管理数据的仓库&#xff01;数据库分类层次型数据库树型结构&#xff0c;一个子记录可以有一个父记录&#xff0c;一个父记录可以有多个子记录&#xff0c;类似一个二叉树&#xff0c;但是一个父节点可以不止两个子节点&#…

复制docker根目录遇到的权限问题

环境 ubuntu20.04, 普通用户使用sudo权限。 需求 linux系统上&#xff0c;默认的docker跟目录在/var/lib/docker目录下&#xff0c;但是根分区太小。想要将docker根目录挪到其它磁盘&#xff0c;防止以后镜像和容器增加后磁盘满了。 操作 先停止所有docker容器&#xff0c;然后…

git-子仓操作

为什么为什么要将代码仓作为子模块&#xff1f;有什么优势&#xff1f;精确版本控制&#xff1a;父仓记录子仓的commit哈希值&#xff0c;确保代码版本固定&#xff0c;避免隐式升级导致的兼容性问题模块化管理&#xff1a;将独立仓库作为子模块嵌入父仓&#xff0c;实现代码物…

代数——第5章——线性算子之应用(Michael Artin)

第 5 章 线性算子之应用 (Applications of Linear Operators) By relieving the brain from all unnecessary work, a good notation sets it free to concentrate on more advanced problems.( 通过减轻大脑所有不必要的工作&#xff0c;良好的符号可以让大脑集中精力解决…

Pytorch02:深度学习基础示例——猫狗识别

一、第三方库介绍库/模块功能torch提供张量操作、自动求导、优化算法、神经网络模块等基础设施。torchvision计算机视觉工具集&#xff0c;提供预训练模型、数据集、图像转换等功能。datasets (torchvision)用于加载常见数据集&#xff08;如 ImageNet、CIFAR-10、MNIST&#x…

spring简单项目实战

项目路径 modelspackage com.qcby.demo1;import com.qcby.service.UserService; import com.qcby.service.UserServiceImpl;public class Dfactory {public UserService createUs(){System.out.println("实例化工厂的方式...");return new UserServiceImpl();} }pack…

ServBay for Windows 1.4.0 发布:新增MySQL、PostgreSQL等数据库自定义配置

各位 Windows 平台的开发者们&#xff0c; ServBay 始终致力于为您打造一个强大、高效且灵活的本地开发环境。距离上次更新仅过去短短一周&#xff0c;经过我们技术团队的快速开发&#xff0c;我们正式推出了 ServBay for Windows 1.4.0 版本。 专业开发者不仅需要一个能用的环…

python网络爬虫小项目(爬取评论)超级简单

python网络爬虫小项目&#xff08;爬取评论&#xff09;超级简单 学习python网络爬虫的完整路径&#xff1a; &#xff08;第一章&#xff09; python网络爬虫(第一章/共三章&#xff1a;网络爬虫库、robots.txt规则&#xff08;防止犯法&#xff09;、查看获取网页源代码)-…