AnnotationConfigWebApplicationContext
refresh()
NoSuchBeanDefinitionException: No qualifying bean of type 'x'
Javadoc for:AnnotationConfigWebApplicationContext #register
请注意,必须调用AnnotationConfigWebApplicationContext.refresh()才能使上下文完全处理新类。
bean x
在rootContext
中定义。没有调用refresh
没有错误,一切都是自动装配并正确启动。
public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
// Root context
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(RootContext.class);
rootContext.refresh();
servletContext.addListener(new ContextLoaderListener(rootContext));
// REST servlet
AnnotationConfigWebApplicationContext restContext = new AnnotationConfigWebApplicationContext();
restContext.register(RestConfig.class);
restContext.refresh(); // <--------- Throws exception
ServletRegistration.Dynamic restServlet = servletContext.addServlet("rest", new DispatcherServlet(restContext));
restServlet.addMapping("/rest/");
}
}
我是否错过了一些明智的配置?
修改
RestConfig
基本上就是这样。
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "foo.bar")
public class RestConfig extends WebMvcConfigurerAdapter {
@Autowired
private X x;
}
编辑2:
没有证据表明在WebApplicationInitializer的javadoc中使用refresh()
确实包含了一个很好的例子。