微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有XML配置支持的基于Spring Java的Servlet容器初始化(替代web.xml)?

我最近想迈出一大步,将所有内容迁移到基于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 举报,一经查实,本站将立刻删除。