实现BeanPostProcessor需要overRide两个方法,一个是postProcessBeforeInitialization,一个是postProcessAfterInitialization。
他们两个是什么作用百度有说,before是在bean初始化前会执行的方法,after是bean初始化后会执行的方法,无论你写了什么业务代码,结构代码,最最最最重要的是要return bean,把传进来的bean再给回去,切忌不能return null。
原因如下:
拿定时任务举例,最简单的写定时任务的方法就是在方法上加一个定时任务的注解,这个定时任务之所以能定时跑,就是在初始化bean完成后,spring有一个扫描全类,把带定时任务注解的方法放进容器,再由spring底层的什么东西去扫他再定时跑。
当你在实现BeanPostProcessor的类里重新after方法却返回 null,就会打断扫描,直接把bean返回,这样写出来的定时任务类不是一个真的定时任务,只是一个能调用里面方法的bean,并且程序不会报错,基本上所有代码也都能正常跑,但你的定时任务就是死活不会调度。
一次使用BeanPostProcessor疏漏引起的重大bug
最新推荐文章于 2023-03-20 15:16:38 发布