热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Spring回调接口之InstantiationAwareBeanPostProcessor

概述org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor这个回调接口中有两个

概述

org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor

这个回调接口中有两个方法:

@Nullable
default Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {return null;
}
default boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {return true;
}

这两个方法分别有什么用&#xff1f;


postProcessBeforeInstantiation


在bean实例化之前&#xff0c;传入该bean的class对象和beanName&#xff0c;如果我们返回的Object不为空&#xff0c;那么则说明这个类不需要Spring实例化且后序自动装配、bean初始化回调等都不会被执行等&#xff08;但注意会去执行BeanPostProcessor的after初始化方法&#xff09;&#xff0c;相当于是在Spring准备初始化之前&#xff0c;如果该类返回不为空&#xff0c;那么后序所有事情都不会进行&#xff0c;Spring认为这个Bean已经是完整的bean了&#xff0c;所以它不会进行其他操作了。但注意这个Bean仍然会被放到Spring容器中去


postProcessAfterInstantiation


当Spring创建完Bean以后&#xff0c;进行自动装配以前&#xff0c;调用此回调&#xff0c;如果此方法中返回false&#xff0c;那么Spring则不会对这个bean进行自动装配(也就是属性注入)的操作。


源码解析


首先看postProcessBeforeInstantiation


org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBean(java.lang.String, org.springframework.beans.factory.support.RootBeanDefinition, java.lang.Object[])方法中

注意看下一个红框里面的doCreateBean方法做完后&#xff0c;bean就被初始化创建且属性已注入&#xff0c;在此之前上一个红框中。

resoleveBeforeInstantiation方法的返回值如果不为空&#xff0c;那么则直接return&#xff0c;后序的doCreateBean就没进入了。

那么我们此处看看上面红框中的方法。


1、Object bean &#61; resolveBeforeInstantiation(beanName, mbdToUse);


第一个红框中就是去执行InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation方法&#xff0c;第二个红框中就是去执行BeanPostProcessor的after初始化方法。

先来看看applyBeanPostProcessorsBeforeInstantiation方法。


2、applyBeanPostProcessorsBeforeInstantiation


这里面可以看出来其调用了InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation方法&#xff0c;如果返回的不为空&#xff0c;则直接return出去了&#xff0c;这些代码比较简单直接&#xff0c;不需要特别解释。

然后第二个红框中的applyBeanPostProcessorsAfterInitialization方法


3、applyBeanPostProcessorsAfterInitialization


这里没有什么好去解释的&#xff0c;这证实了上面我们说的如果postProcessBeforeInstantiation如果不返回空则不进行后序spring的操作&#xff0c;并且还会执行BeanPostProcessor的after初始化方法。


然后看postProcessAfterInstantiation


在上面我们解释的是对象创建以前的时候那个回调会被执行。现在和这个postProcessAfterInstantiation方法是在bean创建了&#xff0c;但还没有自动装配的时候。前面我们说了创建bean的方法是&#xff0c;那么我们进入这个方法

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean


doCreateBean


这里面我们不过多描述Spring在自动装配以前如何通过构造器创建对象&#xff0c;这个我上一篇博客有详细解释。

我们看这个populateBean方法&#xff0c;这个方法时给当前已经创建出来的Bean填充属性的。


populateBean


可以看到这里面如果postProcessAfterInstantiation方法的返回值为false&#xff0c;那么直接return&#xff0c;后序的自动装配代码就不会被执行到。

至此&#xff0c;这个回调接口解释完&#xff0c;具体应用场景看项目业务要求&#xff0c;目前我还没有使用过。


推荐阅读
  • Spring框架的核心组件与架构解析 ... [详细]
  • 在基于.NET框架的分层架构实践中,为了实现各层之间的松散耦合,本文详细探讨了依赖注入(DI)和控制反转(IoC)容器的设计与实现。通过合理的依赖管理和对象创建,确保了各层之间的单向调用关系,从而提高了系统的可维护性和扩展性。此外,文章还介绍了几种常见的IoC容器实现方式及其应用场景,为开发者提供了实用的参考。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 在Ubuntu上安装MySQL时解决缺少libaio.so.1错误及libaio在MySQL中的重要性分析
    在Ubuntu系统上安装MySQL时,遇到了缺少libaio.so.1的错误。本文详细介绍了如何解决这一问题,并深入探讨了libaio库在MySQL性能优化中的重要作用。对于初学者而言,理解这些依赖关系和配置步骤是成功安装和运行MySQL的关键。通过本文的指导,读者可以顺利解决相关问题,并更好地掌握MySQL在Linux环境下的部署与管理。 ... [详细]
  • 《Spring in Action 第4版:全面解析与实战指南》
    《Spring in Action 第4版:全面解析与实战指南》不仅详细介绍了Spring框架的核心优势,如简洁易测试、低耦合特性,还深入探讨了其轻量级和最小侵入性的设计原则。书中强调了声明式编程的优势,并通过基于约定的方法简化开发流程。此外,Spring的模板机制有效减少了重复代码,而依赖注入功能则由容器自动管理,确保了应用的灵活性和可维护性。 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • 深入理解 Java 控制结构的全面指南 ... [详细]
  • 在前文探讨了Spring如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • Java中不同类型的常量池(字符串常量池、Class常量池和运行时常量池)的对比与关联分析
    在研究Java虚拟机的过程中,笔者发现存在多种类型的常量池,包括字符串常量池、Class常量池和运行时常量池。通过查阅CSDN、博客园等相关资料,对这些常量池的特性、用途及其相互关系进行了详细探讨。本文将深入分析这三种常量池的差异与联系,帮助读者更好地理解Java虚拟机的内部机制。 ... [详细]
  • Python内置模块详解:正则表达式re模块的应用与解析
    正则表达式是一种强大的文本处理工具,通过特定的字符序列来定义搜索模式。本文详细介绍了Python内置的`re`模块,探讨了其在字符串匹配、验证和提取中的应用。例如,可以通过正则表达式验证电子邮件地址、电话号码、QQ号、密码、URL和IP地址等。此外,文章还深入解析了`re`模块的各种函数和方法,提供了丰富的示例代码,帮助读者更好地理解和使用这一工具。 ... [详细]
author-avatar
lixinleslee
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有