业务bean不适合spring自动注入的解决
上有一篇文章说到了quartz下的listener,因为了业务组件bean,导致了spring抛出了不适合自动注入的警告。
在一些场景,这样的警告不会造成什么影响,抛出这个警告的原因之一是一个被spring处理的bean,未被spring注册的bean处理器依次处理完,即被实现了接口BeanPostProcessor的类处理。
此时就就会在spring容器加载日志的开始部分打印:
INFO - Bean 'xxxxx' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying);
上次文章里遇到的解决的办法比较生硬,直接解除了quartz的对业务bean的依赖,这样对功能有影响,最近在另外个项目里也遇到同样的问题,都是自定义的BeanPostProcessor对业务bean的处理未生效,在调用的时候空指针。
下面是这个问题的解决办法之一,因为是由于对bean的处理不完全,导致bean的依赖不能由spring的容易自动处理,这个时候要使功能不受影响,只有我们来手动的处理依赖,既然在开始的时候不能自动处理,就让程序在调用的时候从容器里面拿出。比如:
UserSerivice 是我们的业务bean.
ShiroDbRealm 需要用到UserServie来做用户鉴权.
这里调用了@autowire的UserService,会导致UserSerivice不能被spring容器自动处理依赖.
1.对ShiroDbRealm 实现ApplicationContextAware接口,注入Spring的上下文.
2.在影响业务UserSerivice 注入的调用bean-ShiroDbRealm 里,注入UserSerivice 的接口类名.