コンテキスト階層を持つ Web アプリケーションがあります
a) コントローラを除外するスキャンを伴うアプリケーション コンテキスト:
<context:component-scan base-package="com.mypackage">
<context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation" />
</context:component-scan>
b) controller を含む 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>
私はこの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) を処理するにはどうすればよいですか?
ありがとう !