我最近想迈出一大步,将所有内容迁移到基于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. case或不创建2个WebApplicationInitializer类(1个使用AbstractAnnotationConfigdispatcherServletinitializer以及1个使用AbstractdispatcherServletinitializer来实现)的方法?
解决方法:
在示例2中,可以用@ImportResource注释MyWebConfig(类本身,您知道@Configuration在何处).
@ImportResource
是一种指定要从Java配置导入的xml配置的方法.这是混合Java和xml配置的主要方法之一.
从链接:
Like @Import, this annotation provides functionality similar to the element in Spring XML. It is typically used when designing @Configuration classes to be bootstrapped by AnnotationConfigApplicationContext, but where some XML functionality such as namespaces is still necessary.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。