springmvc结合ServletContainerInitialize纯注解开发

简介:

        纯注解开发意味着使用注解或配置类来代替web.xml和springmvc.xml配置文件

1.代替web.xml文件需实现javax.servlet.ServletContainerInitialize接口

更多关于ServletContainerInitialize接口

        在spring中SpringServletContainerInitialize实现了该接口,所以tomcat启动时就会自动执行里面的onStartup()方法,下面是具体实现

@HandlesTypes(WebApplicationInitializer.class)
public class SpringServletContainerInitializer implements ServletContainerInitializer {
	public void onStartup(@Nullable Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)
      	throws ServletException {
    		//......省略其他......
    		//关键看这行代码,依次调用WebApplicationInitializer实现类的onStartup()方法
            //WebApplicationInitializer说明:要在servlet 3.0环境中实现的接口,以便以编程方式配置ServletContext
   		for (WebApplicationInitializer initializer : initializers) {
      		initializer.onStartup(servletContext); //实际上调用的是各个WebApplicationInitializer实例
   		}
	}
}

        所以我们可以继承WebApplicationInitializer接口来实现相关配置,会自动被加载执行,但一般使用他的基础实现类AbstractAnnotationConfigDispatcherServletInitializer

springmvc中继承WebApplicationInitializer结构如下图:

        依次对这些类作部分说明:

//最顶层接口
public interface WebApplicationInitializer {

   //用于使用给定的ServletContext初始化此Web应用程序所需要的任何Servlet,Filter,和必要的Listener上下文属性(context-params)
   void onStartup(ServletContext servletContext) throws ServletException;

}
public abstract class AbstractContextLoaderInitializer implements WebApplicationInitializer {
    
    //向ServletContext注册ContextLoaderListener监听器,监听器干了什么自己可以去探究
    protected void registerContextLoaderListener(ServletContext servletContext) {
		WebApplicationContext rootAppContext = createRootApplicationContext();
		if (rootAppContext != null) {
			ContextLoaderListener listener = new ContextLoaderListener(rootAppContext);
			listener.setContextInitializers(getRootApplicationContextInitializers());
			servletContext.addListener(listener);
		}
		else {
			logger.debug("No ContextLoaderListener registered, as " +
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值