美文网首页
自建一个WebApplicationInitializer

自建一个WebApplicationInitializer

作者: lovePython | 来源:发表于2015-08-18 10:38 被阅读1452次

    实现WebApplicationinitializer的类都可以在web应用程序启动时被加载。
    这个是通过SpringServletContainerIntializer实现ServletContainerIntializer实现的。

    首先建个WebApplicationInitializer.java

    package com.boventech.config;  
    import javax.servlet.ServletContext;  
    import javax.servlet.ServletException;  
    /** 
     * WebApplicationInitializer接口 
     * @author hu.sun 
     */  
    public interface WebApplicationInitializer{  
        public  void config(ServletContext context) throws ServletException;  
    }  
    

    继续,由于必须通过SpringServletContailnerIntializer才能加载,再建个SpringServletContailnerIntializer类:

    package com.boventech.config;  
    import java.lang.reflect.Modifier;  
    import java.util.Set;  
    import javax.servlet.ServletContainerInitializer;  
    import javax.servlet.ServletContext;  
    import javax.servlet.ServletException;  
    import javax.servlet.annotation.HandlesTypes;  
      
    @HandlesTypes(WebApplicationInitializer.class)    
    public class SpringServletContainerInitializer implements ServletContainerInitializer{  
        @Override  
        public void onStartup(Set<Class<?>> webApplicationInitializers, ServletContext servletContext)  
                throws ServletException {  
            if (webApplicationInitializers != null) {  
                for (Class<?> webApplicationInitializerClass : webApplicationInitializers) {  
                    if (!webApplicationInitializerClass.isInterface() && !Modifier.isAbstract(webApplicationInitializerClass.getModifiers()) &&  
                            WebApplicationInitializer.class.isAssignableFrom(webApplicationInitializerClass)) {  
                        try {  
                            ((WebApplicationInitializer) webApplicationInitializerClass.newInstance()).config(servletContext);  
                        }  
                        catch (Throwable ex) {  
                            throw new ServletException("Failed to instantiate webApplicationInitializer class", ex);  
                        }  
                    }  
                }  
            }  
        }  
    }  
    

    注意:
    要实现ServletContainerInitializer接口,必须指定实现的类。@HandlesTypes就起到关键性作用。
    还有一个最重要的:在Libraries->Spring -web-x.x.x.jar->META-INF/services/javax.servlet.ServletContainerInitializer里面的内容必须是实现ServletContainerInitializer的类,即com.boventech.config.SpringServletContainerInitializer

    package com.boventech.config;  
      
    import javax.servlet.ServletContext;  
    import javax.servlet.ServletException;  
      
    import org.springframework.web.context.ContextLoaderListener;  
    import org.springframework.web.util.WebAppRootListener;  
      
    public class DefaultServletConfig implements WebApplicationInitializer{  
      
        @Override  
        public void config(ServletContext servletContext)  throws ServletException{  
            servletContext.addListener(new ContextLoaderListener());  
            servletContext.addListener(new WebAppRootListener());  
            servletContext.setInitParameter("contextConfigLocation", "classpath*:**/*Context.xml");  
            //设置webAppRootKey得值以得到根目录  
            servletContext.setInitParameter("webAppRootKey", "learning");  
        }  
    }  
    

    相关文章

      网友评论

          本文标题:自建一个WebApplicationInitializer

          本文链接:https://www.haomeiwen.com/subject/wvtgqttx.html