aegean1 2019-12-15 23:23 采纳率: 50%
浏览 283
已采纳

BeanPostProcessor接口的两个方法是在类初始化一前一后调用吗?

在测试BeanPostProcessor接口的两个方法时,
发现该接口的两个方法并不是在类初始化一前一后调用的,具体如下:

1、一个类实现BeanPostProcessor接口,并实现该接口的两个方法:

public class Car implements BeanPostProcessor {

    public Car(){
        System.out.println("创建实例 constructor 。。。。");
    }

    public void init(){
        System.out.println("对象初始化。。。。");
    }

    public void destroy(){
        System.out.println("对象销毁。。。。");
    }
    public Object postProcessBeforeInitialization(Object bean, String beanName){
        System.out.println("beanName "+ beanName +" 对象初始化前调用postProcessBeforeInitialization。。。。。");
        return bean;
    }

    public Object postProcessAfterInitialization(Object bean, String beanName){
        System.out.println("beanName "+ beanName +" 对象初始化后调用postProcessAfterInitialization。。。。。");
        return bean;
    }
}

2、实例化Car对象

@Configuration
public class MainConfigLifcycle {

    @Bean(initMethod = "init", destroyMethod = "destroy")
    public Car car(){
        return new Car();
    }
}

3、打印日志如下:
图片说明

所以我怀疑BeanPostProcessor接口的两个方法并不是在类初始化一前一后调用的,请大家指导下,谢谢!

  • 写回答

2条回答 默认 最新

  • 太阳伞下的阿呆 2019-12-16 14:49
    关注
    1. BeanPostProcessor的实现类必须注册至上下文之后才会被回调各种方法

    2. 你的bean自己既是bean,也是BeanPostProcessor,所以自己注册的时候上下文中没有Car这个后置处理,所以看不到回调。当car注册进上下文之后,其他bean初始化前后都会回调该实现的后置处理

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样