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条)

报告相同问题?

悬赏问题

  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 matlab求解平差
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 vue2登录调用后端接口如何实现