当前位置: 首页 > 后端技术 > Java

TroubleshootnoteligibleforgettingprocessedbyallBeanPostProcessors

时间:2023-04-01 23:47:05 Java

前言在上一篇文章中,我们讲了如何将自定义实现的SPI与spring集成,其实在实现过程中还有一个小细节,就是我们的SPI本来就是带拦截器功能的,(ps:对如何用拦截器实现SPI感兴趣的朋友可以查看这篇文章-->说说如何用拦截器功能实现SPI)。为了保留这个拦截器功能,我最初的想法是将狸猫换成王子,将拦截器功能集成到spring提供的后处理器中。当时的实现代码如下@Slf4j@DeprecatedpublicclassSpiInstancePostProcessorimplementsBeanPostProcessor{privateDefaultListableBeanFactorybeanFactory;私有拦截处理程序拦截处理程序;publicSpiInstancePostProcessor(InterceptorHandlerinterceptorHandler,DefaultListableBeanFactorybeanFactory){this.interceptorHandler=interceptorHandler;这个.beanFactory=beanFactory;}@SneakyThrows@OverridepublicObjectpostProcessAfterInitialization(Objectbean,StringbeanName)throwsBeansException{if(bean.getClass().isAnnotationPresent(Activate.class)){returninterceptorHandler.getInterceptorChain().pluginAll(bean);}返回豆;}}功能实现了,但是控制台显示如下信息trationDelegate$BeanPostProcessorChecker:Bean'interceptorHandler'oftype[com.github.lybgeek.spring.interceptor.handler.InterceptorHandler]isnoteligibleforgetting被所有BeanPostProcessors处理(例如:noteligibleforauto-proxying)调查过程是通过控制提示的信息找到对应的源码在org.springframework.context.support.PostProcessorRegistrationDelegate找到相关的现实@OverridepublicObjectpostProcessAfterInitialization(Objectbean,StringbeanName){if(!(beaninstanceofBeanPostProcessor)&&!isInfrastructureBean(beanName)&&this.beanFactory.getBeanPostProcessorCount()

最新推荐
猜你喜欢