【发布时间】:2013-11-12 03:33:33
【问题描述】:
我最近想迈出一大步,将所有内容都迁移到基于 Java 的配置中。到目前为止工作完美。只有一个问题。
有这个来自 Spring 的 WebApplicationInitializer 接口,它实际上是第一个 web.xml 替代 AFAIK:
public class MyWebApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
XmlWebApplicationContext appContext = new XmlWebApplicationContext();
appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet(appContext));
registration.setLoadOnStartup(1);
registration.addMapping("/");
}
}
更好的是,有一个非常棒的 AbstractAnnotationConfigDispatcherServletInitializer 类,如果您的配置文件(Dispatcher 等)都是基于 Java 的,那么使用它会更加完美:
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { MyWebConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
还有一个 XML 版本,如果您的调度程序仍然卡在 xml 中:
public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
@Override
protected WebApplicationContext createServletApplicationContext() {
XmlWebApplicationContext cxt = new XmlWebApplicationContext();
cxt.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
return cxt;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
现在我的问题是:我主要有基于 java 的配置文件,所以我使用的是 AbstractAnnotationConfigDispatcherServletInitializer 的 2. case。但是我有一个 XML 文件(用于 Spring Security),我真的很想注册它,而无需更改我的抽象类。对于这种情况,接口WebApplicationInitializer(1.case)是目前唯一的解决方案(或者可以是解决方案)?或者是否有另一种方法可以在不使用 1. 案例或不创建 2 个 WebApplicationInitializer 类(1 个 AbstractAnnotationConfigDispatcherServletInitializer 和 1 个 AbstractDispatcherServletInitializer)的情况下实现这一目标?
【问题讨论】:
-
我刚刚看到这个页面SpringBlog,其中 Spring Security 是基于 Java 配置的。 3个月..所以从技术上讲,我不再有这个问题了。但是对于基于 Java 的其他情况,这个问题可能很有趣。尚不支持。
标签: java xml spring servlets spring-mvc