`
yensai
  • 浏览: 3299 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于实现了接口BeanPostProcessor 和 接口FactoryBean 的注意事项

    博客分类:
  • java
阅读更多

 

问题背景:开发中,连接数据库的用户名和密码在正式环境中是密文的,在开发环境中是明文的,为了方便,所以在配置c3p0 数据连接池时就直接配置properties属性,为其配置的一个密文解密的bean。 如下图1:

 


 


 

同时,为了实现一些类在初始化类的时候为期属性复制 那么实现了接口BeanPostProcessor 如下图2

 


 

那么在启动服务时,就会报错,说c3p0 数据连接池创建失败。如下图3:

 


 


 

解决过程:

 

因为c3p0 的 属性 properties 配置一个bean 时,那么这个bean需要实现接口FactoryBean 的getObject() 方法,在服务启动时才能保证获取到属性,

 

如下图4:

 


 


 

一开始跟踪spring 源码时,发现如果不实现 BeanPostProcessor 接口时,下图红框的innerBean 不为null ,如果实现了接口,那么innerBean 为null,如下图5:

 


 

这个问题在网上找了很久都没有解决的办法,后来问了一个龙骚年,他说可能是bean创建顺序,给了我提示。

 

再重新看BeanPostProcessor 接口的创建属性和其实现类,发现在问题所在就是在于其前置方法中返回了一个null,如下图6:

 


所以出来的 innerBean 一直为null ,后来改为返回 bean ,问题就解决了

分享到:
评论

相关推荐

    Spring BeanPostProcessor接口使用详解

    通过使用BeanPostProcessor接口,开发者可以对Bean进行自定义处理,实现更加灵活和强大的Bean管理功能。 此外,Spring框架还提供了其他类型的后处理器接口,例如BeanFactoryPostProcessor和...

    5. 多个service实现同一个接口 或者抽象类 1

    为了管理和使用这些bean,文件中还定义了一个`ApplicationContextHolder`类,它实现了`ApplicationContextAware`和`BeanPostProcessor`接口。`ApplicationContextAware`接口使类能够获取Spring应用上下文,从而可以...

    com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对Spring进行扩展学习:BeanPostProcessor,BeanFactoryAware,BeanNameAware,ApplicationContextAware,FactoryBean,BeanDefinitionRegistryPostProcessor,BeanFactoryPostProcessor,BeanPostProcessor,ResourceLoaderA

    com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对...通过FactoryBean结合InvocationHandler关于动态代理invoke()方法的理解5.BeanNameAware 7.BeanFactoryPostPro

    Java自定义注解与spring BeanPostProcessor详解

    当Spring容器实例化一个bean时,如果该bean实现了BeanPostProcessor接口,那么Spring会在bean的初始化前后调用其`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`方法。这使得开发者可以在...

    Spring 内置 BeanPostProcessor类图.zip

    通常,类图会包含BeanPostProcessor接口、其方法签名、可能的实现类以及它们如何参与到Spring的bean生命周期中。通过分析这个类图,我们可以看到Spring如何调用这些自定义处理器,并理解它们在bean实例化过程中的...

    Spring源码学习八:常用的扩展接口详解1

    实现这个接口的类能够在Bean加载过程中获取到Spring应用上下文`ApplicationContext`,从而可以访问容器中的其他Bean和服务,如读取配置信息、发布事件等。 4. **BeanFactoryAware接口**: `BeanFactoryAware`接口...

    详解使用Spring的BeanPostProcessor优雅的实现工厂模式

    在Spring框架中,BeanPostProcessor(BPP)是一个强大的接口,它允许我们自定义bean的初始化和销毁过程。BPP是在bean实例化之后,但初始化之前以及销毁之前执行特定操作的回调机制。通过实现这个接口,我们可以对...

    BeanPostProcessor实现注入的@Autowired注入的对象是增强的代理对象.rar

    在Spring框架中,`BeanPostProcessor`是一个非常重要的接口,它允许我们自定义bean的处理逻辑,这包括在bean初始化前后进行干预。`@Autowired`注解是Spring提供的一种依赖注入方式,它能够自动匹配并注入合适的bean...

    springAOP核心组件分析

    7. 实现BeanPostProcessor接口的方法:AnnotationAwareAspectJAutoProxyCreator类实现了BeanPostProcessor接口的postProcessBeforeInitialization和postProcessAfterInitialization方法。在bean初始化前后这两个方法...

    详解Spring中实现接口动态的解决方法

    在Spring框架中,动态实现接口通常涉及到依赖注入和AOP(面向切面编程)的概念。在上述场景中,提到的需求是基于Mybatis的注解功能,即@Select、@Insert等,这些注解用于在接口方法上定义SQL语句。由于没有具体的...

    Spring Annotaion Support详细介绍及简单实例

    Spring通过一系列的扩展点和钩子(hook),允许开发者自定义容器行为,其中BeanPostProcessor接口就是一个非常重要的扩展点。 BeanPostProcessor接口提供了两个方法,分别是postProcessBeforeInitialization和...

    动态代理接口并注册到spring容器

    1. 定义需要代理的接口和实现类。 2. 创建自定义的InvocationHandler,处理代理对象的方法调用。 3. 使用Proxy.newProxyInstance创建动态代理对象。 4. 实现BeanPostProcessor并覆盖postProcessBeforeInitialization...

    Spring中与Bean相关的接口

    此外,`BeanPostProcessor`接口允许自定义Bean的初始化和销毁过程。它提供两个方法:`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`,分别在Bean初始化之前和之后调用,可以用来进行额外...

    Spring源码流程图

    下面我们将深入探讨Spring源码流程图,了解核心组件、Bean定义信息、Bean工厂、Bean生命周期和Aware接口的作用。 核心组件解析 在Spring框架中,核心组件包括BeanFactory、BeanDefinitionReader、...

    动力节点SSM课件源码分析教程配套资料分享

    编程人员技术提升最快的方式是阅读和理解优秀的代码,通过阅读和理解优秀开源框架源码,掌握开源框架是如何一步一步实现的,深入理解其底层实现原理,领悟大师级设计思想,开阔视野,让思想顿悟,提高源码阅读能力及...

    详解如何在低版本的Spring中快速实现类似自动配置的功能

    可以通过实现InitializingBean接口、使用@PostConstruct注解、指定init-method,以及实现DisposableBean接口、使用@PreDestroy注解、指定destroy-method来分别控制Bean初始化和销毁时的行为。 2. **XxxAware接口**...

    springAOP核心组件分析.pdf

    Spring会优先处理实现了PriorityOrdered接口的BeanPostProcessor,然后是实现了Ordered接口的,最后是那些没有实现优先级接口的。 3)AnnotationAwareAspectJAutoProxyCreator实现了Ordered接口,因此会在注册过程...

    借助spring自定义命令执行器

    通过以上讨论,我们可以看到,利用Spring的自定义命令执行器和BeanPostProcessor接口,我们可以有效地实现业务解耦,提高代码的可维护性和灵活性。在实际项目中,可以根据具体需求进行适当的调整和扩展,以适应不同...

    Spring Bean生命周期.pdf

    接着,Spring容器会调用实现了BeanPostProcessor接口的Bean的postProcessBeforeInitialization和postProcessAfterInitialization方法,以在初始化前后进行扩展。之后,如果Bean实现了InitializingBean接口,则调用...

Global site tag (gtag.js) - Google Analytics