bean的实例化和初始化

news2024/9/28 1:22:33
  • Instantiation:表示实例化,对象还未生成

  • Initialization:表示初始化,对象已经生成
    在这里插入图片描述
    InstantiationAwareBeanPostProcessor继承自BeanPostProcessor,它内部提供了3个方法,再加上BeanPostProcessor接口内部的2个方法,所以实现这个接口需要实现5个方法。

1.postProcessBeforeInstantiation()–自定义对象–>postProcessAfterInitialization();//一般不会走

2.postProcessBeforeInstantiation() -->postProcessAfterInstantiation–>postProcessBeforeInitialization()–>postProcessAfterInitialization()
我们看出:postProcessBeforeInstantiation一定执行, postProcessAfterInitialization一定执行.

1.InstantiationAwareBeanPostProcessor接口方法执行时机

实现该接口的常见类有CommonAnnotationBeanPostProcessorAutowiredAnnotationBeanPostProcessorAbstractAutoProxyCreator

1.1 postProcessBeforeInstantiation()执行时机

AbstractAutowireCapableBeanFactory#createBean方法中的resolveBeforeInstantiation方法,doCreateBean方法之前。

  • AbstractAutoProxyCreator重写了该方法,作用是获取到切面类,在实例化第一个单例bean时,对所有我们自定义的切面类进行解析。然后放到缓存中,key是切面类name,value是advisor类型的数组,因为一个切面类可以有多个增强方法。

1.2 postProcessAfterInstantiation()执行时机

AbstractAutowireCapableBeanFactory#doCreateBean方法中的populateBean方法。

  • 默认返回true。

1.3 postProcessProperties()执行时机

AbstractAutowireCapableBeanFactory#doCreateBean方法中的populateBean方法。postProcessAfterInstantiation()方法执行之后。

  • AutowiredAnnotationBeanPostProcessor重写了该方法,作用是获取到Autowired注解标注的字段(反射),然后调用getBean方法实例化,然后设置到引入它的bean中。
  • CommonAnnotationBeanPostProcessor重写了该方法,作用是获取到Resource注解标注的字段(反射),然后调用getBean方法实例化,然后设置到引入它的bean中。

2. BeanPostProcessor接口方法执行时机

2.1 postProcessBeforeInitialization()执行时机

AbstractAutowireCapableBeanFactory#doCreateBean方法中的initializeBean方法。

  • CommonAnnotationBeanPostProcessor继承的InitDestroyAnnotationBeanPostProcessor重写了该方法,作用是在每个类初始化时执行加了@PostConstruct注解的方法。做一些初始化工作。

2.2 postProcessAfterInitialization()执行时机

AbstractAutowireCapableBeanFactory#doCreateBean方法中的initializeBean方法。

  • AbstractAutoProxyCreator重写了该方法,作用是为aop类创建代理对象。

在这里插入图片描述

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

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

相关文章

VS Code 安装

前端开发工具 VSCodeHBuildersublimeWebStorm VS Code 一、介绍 Visual Studio Code(简称 VS Code )是 Microsoft 于2015年4月发布的一款代码编辑器。VS Code 对前端代码有非常强大的支持,同时也其他编程语言(例如&#xff1a…

20年运维老兵,SRE领域大咖张观石揭秘FinOps体系实践方法

当前,降本增效成为各大互联网公司的重要方向,IT成本则占据了互联网成本的大头。随着IT资源成本花费越来越高,很多公司意识到掌握管控成本和优化成本的重要性。 如何有效的降本?如何做好成本的洞察管控?如何掌握资源成…

ECDH 算法

一、简介 ECDH全称是椭圆曲线迪菲-赫尔曼秘钥交换(Elliptic Curve Diffie–Hellman key Exchange),主要是用来在一个不安全的通道中建立起安全的共有加密资料,一般来说交换的都是私钥,这个密钥一般作为“对称加密”的…

STM32速成笔记—IWDG

文章目录 一、IWDG简介二、STM32的IWDG2.1 STM32的IWDG简介2.2 喂狗2.3 IWDG框图 三、IWDG配置步骤四、IWDG配置程序4.1 IWDG初始化程序4.2 喂狗 五、应用实例 一、IWDG简介 独立看门狗(Independent Watchdog, IWDG),什么是看门狗&#xff1…

【二叉树part06】| 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

目录 🎈LeetCode654.最大二叉树 🎈LeetCode617.合并二叉树 🎈LeetCode700. 二叉搜索树中的搜索 🎈LeetCode98. 验证二叉搜索树 🎈LeetCode654.最大二叉树 链接:654.最大二叉树 给定一个不重复的整数数…

林客本地生活商城小程序开发

本地生活商城小程序的市场前景非常广阔。近年来,随着移动互联网技术的普及和人们消费观念的变化,越来越多的消费者开始通过手机进行线上购物。本地生活商城小程序恰好满足了用户对于便捷、快速、个性化购物体验的需求,具有以下优势&#xff1…

1752_使用Perl实现目录遍历

全部学习汇总: GreyZhang/speed_emacs: Try to make a new emacs configuration which is fast even on windows! (github.com) 关于Perl和Python的优劣我不去做什么分析,也不去发表什么深入的见解。我个人的学习过程是先Perl后Python再回到Perl。因为工…

【2023.6.26】记达梦数据库基于信创服务器麒麟OS报错与优化

一、场景描述 OS:银河麒麟V10(GUI)CPU:鲲鹏920达梦数据库:V8 (基于平台信创:麒麟V10、鲲鹏架构)金蝶中间件:V9 二、达梦数据库报错记录 报错1:(SWT:18564&…

基于Java削面快餐店点餐服务系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

cmd中输入npm install,回车——安装node modules依赖,出现报错的【解决方法】

目录 1.正常情况是: 2.当前问题: 3.解决方法: 当拿到一个前端项目的代码文件夹的时候,想要启动项目。 如果项目的代码文件夹里面没有node modules文件夹: 需要打开cmd,然后在里面输入 npm install (可…

c++初始化列表和静态成员

文章目录 一、初始化列表二、静态(static)成员 一、初始化列表 类对于成员变量的赋值有两种方式 函数体内赋值初始化列表 函数体内赋值就是直接在构造函数中赋值即可,而初始化列表它是较为特殊的一种方式! 初始化列表是在构造函数()之后以:开始,然后后…

查询穿梭框实现

技术栈: 使用vue3 的composition api 和 tsx 进行开发 一、需求描述 点击编辑,显示穿梭框: 可将左侧维度拖动至右侧,已选维度可上下拖动调整顺序。 二、需求分析 1、状态传递过程 我们首先来分析一下,整个流程中的…

魔改xxl-job,彻底告别手动配置任务!自动注册xxljob定时任务

xxl-job是一款非常优秀的任务调度中间件,轻量级、使用简单、支持分布式等优点,让它广泛应用在我们的项目中,解决了不少定时任务的调度问题。 我们都知道,在使用过程中需要先到xxl-job的任务调度中心页面上,配置执行器…

WiFi模块测试|高通QCA9531方案WiFi模块网页配置说明-SKW99/SKW100

本篇以高通QCA9531方案无线路由WiFi模块SKW99为例,简单介绍 高通方案无线路由WiFi模块的软件使用。友情提示:多图,请在WiFi环境下阅读。 以SKW99为例,在SKW99规格书找到模块系统框图、PIN脚图及各个PIN脚的描述定义;之…

AutoSAR系列讲解(入门篇)3.4-RTE对Ports的支撑(下)

一、C/S接口的实现 之前在第二章AppL中讲过了C/S接口,这里再更加深入的说明一下其实现的原理:首先,C/S接口就是客户/服务接口,这个接口就是客户来调用服务 端的操作的一个接口。也就是我写着写着,发现我想要调用一个函…

【Figma技巧】布尔变量控制图层显隐

用2023年6月22日更新的Figma最新功能,实现按钮控制图层显隐的交互。 实现效果 步骤 1. 创建本地变量 点击右侧面板中的Local variables弹出变量面板,点击底部Create variable按钮,创建一个Boolean布尔变量。 本案例中,我需要分…

从0开始Jmeter接口测试实战

在之前的文章中给大家介绍过接口测试文档和接口测试用例示例,本文基于Jmeter工具给大家介绍一下如何实现接口测试用例:包括发起Http请求,绕过登陆,验证响应。JMeter是Apache组织开发的基于Java的压力测试工具。具有开源免费、框架…

Python|Pyppeteer操作浏览器,弹出文件选择框,实现自动选择“指定文件”(14)

前言 本文是该专栏的第14篇,结合优质项目案例持续分享Pyppeteer的干货知识,记得关注。 使用pyppeyeer操作浏览器的时候,可能有时候会遇到这样的情况,如下图所示: 通过程序脚本自动点击某个按钮之后,触发一个弹出框,需要输入对应的文件路径。经验丰富的同学,可能会想到…

深入浅出 - 单例模式

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌ Java知识图谱点击链接:体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收…

【MySQL】幽深不可测,登此方觉心

详解Mysql安装教程 一、MySQL基础 1、MySQL是什么? MySQL是一种用关系型数据库管理系统的软件。它是一种开源数据库,可以利用它来存储、管理和访问各种类型的数据。MySQL可用于多种应用程序,包括网站、电子商务系统、移动应用程序、企业级应用程序等…