AnnotationConfigWebApplicationContext
refresh()
按照javadoc中的建议调用时的以下内容
NoSuchBeanDefinitionException: No qualifying bean of type 'x'
Javadoc 用于:AnnotationConfigWebApplicationContext#register
请注意,必须调用 AnnotationConfigWebApplicationContext.refresh() 才能使上下文完全处理新类。
beanx
在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:
没有证据表明在WebApplicationInitializerrefresh()
的 javadoc中使用确实包含一个很好的示例。