我有一个带有上下文hirarchy的Web应用程序
a)扫描的应用程序上下文,不包括控制器:
<context:component-scan base-package="com.mypackage">
<context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation" />
</context:component-scan>
b)包含控制器的mvc上下文:
<context:component-scan base-package="com.mypackage"
use-default-filters="false">
<context:include-filter expression="org.springframework.stereotype.Controller"
type="annotation" />
</context:component-scan>
我写了&#39;这个beanPostProcessor(自动设置记录器)
@Component
public class LoggableInjector implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(final Object bean, String beanName) throws BeansException {
ReflectionUtils.doWithFields(bean.getClass(), new FieldCallback() {
public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException {
ReflectionUtils.makeAccessible(field);
if (field.getAnnotation(Loggable.class) != null) {
Logger log = LoggerFactory.getLogger(bean.getClass());
field.set(bean, log);
}
}
});
return bean;
}
@Override
public Object postProcessAfterInitialization(final Object bean, String beanName) throws BeansException {
ReflectionUtils.doWithFields(bean.getClass(), new FieldCallback() {
public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException {
ReflectionUtils.makeAccessible(field);
if (field.getAnnotation(Loggable.class) != null) {
Logger log = LoggerFactory.getLogger(bean.getClass());
field.set(bean, log);
}
}
});
return bean;
}
}
问题是我没有为@Controller类调用这个处理器,因为它只在自己的上下文中处理bean。
我怎样才能使它处理mvc上下文中的bean(即@Controller)?
谢谢!
答案 0 :(得分:0)
https://jira.spring.io/browse/SPR-8331
以下是Spring明确表示的内容。
PostProcessor只能在PostProcessor本身所属的上下文中处理bean,而不能处理Hierarchical context。
我想到的唯一方法是在你要加载的所有上下文中添加PostProcessor。