1

我需要将一个对象注入到我的 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,我也会在执行链的后期得到 NPE。

其他类正在使用组件扫描成功地连接到其他地方。为什么上面总是为空?难道我做错了什么?

4

1 回答 1

0

@Inject 和 @Autowired 在 Spring 中的工作方式应该非常相似。确保使用中的*BeanPostProcessor 知道MonitoringExceptionResolver:将其标记为@Component 并使其成为某个@ComponentScan 的主题,或者使@Bean 工厂方法成为某个正在使用的@Configuration 类。

于 2012-10-16T16:28:03.537 回答