2013-10-31 64 views
3

我最近想要採取一大步,並將所有內容都移至基於Java的配置。至今工作完美。只有一個問題。Spring基於Java的Servlet容器初始化(web.xml替代)與XML配置支持?

有此WebApplicationInitializer接口從春,這實際上是第一個可替代的web.xml據我所知:

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類,更是完美的,如果你的配置文件要使用的(調度員等)都是基於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:

0123現在
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的配置文件,所以我現在用的是2的情況下與AbstractAnnotationConfigDispatcherServletInitializer。但是我有一個XML文件(用於Spring Security),我真的很想註冊,而不需要改變我的抽象類。對於這種情況是接口WebApplicationInitializer(1. case)是唯一的當前解決方案(或可以是解決方案)?還是有另一種方法來實現這一點,而不使用1的情況下,或沒有創建2 WebApplicationInitializer類(1與AbstractAnnotationConfigDispatcherServletInitializer和1與AbstractDispatcherServletInitializer)?

+0

我剛看到這個頁面[SpringBlog](http://spring.io/blog/2013/07/03/spring-security-java-config-preview-web-security),其中配置了Spring Security基於Java的。 3個月..所以技術上我不再有這個問題了。但是,對於其他基於Java的conf的情況,這個問題可能很有趣。尚未支持。 – akcasoy

回答

3

在示例2中,您可以使用@ImportResource註釋MyWebConfig(該類別本身,您知道,您在@Configuration處有......)。

@ImportResource是一種指定某些xml配置從Java配置導入的方法。這是混合Java和xml配置的主要方法之一。

從鏈接:

像@Import,這個註解提供類似於Spring的XML元素的功能。它通常用於設計由AnnotationConfigApplicationContext引導的@Configuration類,但其中某些XML功能(如命名空間)仍然是必需的。

相關問題