我正在尝试使用spring mvc 4
仅使用web.xml
注释来部署@Configuration
网络应用程序而不使用public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext)
throws ServletException {
WebApplicationContext context = getContext();
servletContext.addListener(new ContextLoaderListener(context));
ServletRegistration.Dynamic dispatcher = servletContext.addServlet(
"DispatcherServlet", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("*.html");
}
private AnnotationConfigWebApplicationContext getContext() {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setConfigLocation("ge.dm.icmc.config.WebConfig");
return context;
}
文件。
我有
WebConfig.java
}
和我的@Configuration
@EnableWebMvc
@ComponentScan(basePackages="ge.dm.icmc")
public class WebConfig{
}
类看起来像:
{{1}}
但是当我尝试启动应用程序时,我会在日志中看到:
14:49:12.275 [localhost-startStop-1] DEBUG o.s.w.c.s.AnnotationConfigWebApplicationContext - 无法为config location []加载类 - 尝试打包扫描。 java.lang.ClassNotFoundException:
如果我尝试添加web.xml文件,则会正常启动。
答案 0 :(得分:7)
您使用的方法setConfigLocation
在这种情况下是错误的。您应该使用register
方法。
private AnnotationConfigWebApplicationContext getContext() {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(ge.dm.icmc.config.WebConfig.class);
return context;
}
然而,我没有实现WebApplicationInitializer
,而是强烈建议使用Spring的一个便捷类。在你的情况下,AbstractAnnotationConfigDispatcherServletInitializer
会派上用场。
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() { return null;}
protected Class<?>[] getServletConfigClasses() {
return new Class[] { WebConfig.class};
}
protected String[] getServletMappings() {
return new String[] {"*.html"};
}
}