我最近想要迈出一大步,将所有内容都转移到基于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
)的情况下实现此目的?
答案 0 :(得分:3)
在示例2中,您可以MyWebConfig
(该类本身,您知道,@Configuration
在......处注明了@ImportResource
。
@ImportResource
是一种指定从Java配置导入的某些xml配置的方法。这是混合使用Java和xml配置的主要方法之一。
从链接:
与@Import一样,此注释提供的功能类似于Spring XML中的元素。它通常在设计由AnnotationConfigApplicationContext引导的@Configuration类时使用,但是仍然需要一些XML功能,例如命名空间。