次のように、No XML Spring @Configuration オブジェクトにオブジェクトを挿入する必要があります。
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "web.client")
public class WebApplicationConfiguration extends WebMvcConfigurerAdapter {
private static final Logger log = LoggerFactory.getLogger(WebApplicationConfiguration.class);
@Inject
private MonitoringExceptionResolver resolver; // always null
@Override
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
log.debug("configuring exception resolvers");
super.configureHandlerExceptionResolvers(exceptionResolvers);
exceptionResolvers.add(new DefaultHandlerExceptionResolver());
exceptionResolvers.add(new AnnotationMethodHandlerExceptionResolver());
exceptionResolvers.add(new ResponseStatusExceptionResolver());
exceptionResolvers.add(resolver); // passing null ref here
}
}
MonitoringExceptionResolver は次のように定義されます。
@Service
public class MonitoringExceptionResolver implements HandlerExceptionResolver {
private final Counters counters;
@Inject
public MonitoringExceptionResolver(Counters counters) {
super();
this.counters = counters;
}
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
Counter counter = counters.getCounterFor(ex.getClass());
if(counter != null) {
counter.increment();
}
return null;
}
}
ただし、@Autowired を使用しても、上記の「リゾルバー」フィールドが null であるため、実行チェーンの後半で NPE が発生します。
他のクラスは、コンポーネント スキャンを使用して別の場所に接続されています。上記で常に null になるのはなぜですか? 私は何か間違ったことをしていますか?