首页
学习
活动
专区
圈层
工具
发布

【重要】Spring在web.xml中的配置原理说明

Spring原理说明: // 方式零:就在实现类中改,用哪个改哪个 // new出来的,耦合性太强,依赖于具体的实现类,如果我具体的实现类变了,那么这里的接口代码也得跟着变,这样不好。...IUserDao dao = new IUserDaoImpl();  // private IUserDao dao = new IUserDaoImplForOracle();  // 方式一:不在实现类中修改...,在工厂类中改forName的参数 // private IUserDao dao = BeanFactory.newInstance().getUserDao();  // 方式二:不在工厂类中修改...,在配置文件中修改,拿到的是代理对象,让代理对象帮我生成,我去这是最懒的方式啊!...// 所以Spring在web.xml中的就是配置实现了一个实现了ServletContextListener接口的监听器。

89030
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SpringMvc(二)HandlesTypes源码

    , 应用的web.xml,还有jar包里的web.xml **找到应用中所有的ServletContainerInitializer实现类:**将应用目录下META-INF/services/javax.servlet.ServletContainerInitializer...标注的实现类生成映射:**如果该实现类有@HandlesTypes注解,则将注解里的value作为key,该实现类(ServletContainerInitializer实现类)添加到value,存入typeInitializerMap...的key匹配,匹配上就把当前class(也就是HandlesTypes.value的实现类)添加到initializerClassMap的value中; 到这里,typeInitializerMap的工作也就完成了...= ServletContainerInitializer实现类集合(需要传入当前key类型的实现类), 对应的功能: initializerClassMap :存储应用初始化程序类及需要的参数对象类型...实现类,并把当前class作为参数类型存到initializerClassMap中,待后面启动时,直接获取。

    98420

    深入Spring Boot (十五):web.xml去哪了

    或更高版本,服务器会在启动的时候在类路径下查找javax.servlet.ServletContainerInitializer接口的实现类,执行实现类的onStartup方法用于配置Servlet容器...;如果ServletContainerInitializer接口的实现类使用@HandlesTypes注解声明了感兴趣的类或接口,那么这个感兴趣的类及其子类或接口的实现类就会被设置到Set的文件,这个文件的内容是ServletContainerInitializer接口实现类的全路径,例如com.example.demo.MyServletContainerInitializer,下面实现一个简单的...Spring3.1中的SpringServletContainerInitializer实现了ServletContainerInitializer接口,同时在相应的jar包META-INF/services...,所以,支持Servlet3.0+的容器在启动时会自动扫描classpath下WebApplicationInitializer接口的实现类,并将这些实现类传递给onStartup方法的第一个参数。

    2.5K51

    Spring揭秘--寻找遗失的web.xml

    那时,还离不开 web.xml 的配置,在 xml 文件中编写繁琐的 servlet 和 filter 的配置。...的实现类,并且容器将 WEB-INF/lib 目录下 JAR 包中的类都交给该类的 onStartup() 方法处理,我们通常需要在该实现类上使用 @HandlesTypes 注解来指定希望被处理的类...而方法入参中 Set<class<class</class</class 这么声明一个 ServletContainerInitializer 的实现类,web 容器并不会识别它,所以,需要借助 SPI...寻找 spring 中 ServletContainerInitializer 的实现类并不困难,可以迅速定位到 SpringServletContainerInitializer 该实现类。...,实际上一开始我在各种 ServletContainerInitializer 的实现类中打了断点,最终定位到,根本没有运行到 SpringServletContainerInitializer 内部,

    1.4K32

    SpringMVC基本使用关于DisptacherServlet关于ServletContainerInitializer最简单配置接收参数路径变量表单变量

    ,我们会在web.xml中配置SpringMVC,然后SpringMVC会根据web.xml中的配置初始化DisptacherServlet在servlet3.0之后,出现了ServletContainerInitializer...,可以在项目启动最开始时,会自动扫描实现了ServletContainerInitializer接口的类,对Servlet、Listener、Filter进行动态注册,利用此技术,可以通过实现ServletContainerInitializer...,往后面看)ServletContainerInitializer的作用和web.xml差不多,都是部署servlet,listener,filter,只是一个是用java代码配置,一个用xml配置在实现了...ServletContainerInitializer接口的类上要注解上@HandlesTypes(//要动态注册的class,一定要是Servlet或者Listener或者Filter)ServletContainerInitializer...接口中只有一个方法onStart(Set,ServletContext)当应用启动的时候,会调用onStart方法,参数Set就是@HandlesTypes中的类,意味着这些类可以被动态注册实现动态注册的核心方法

    1.3K60

    web.xml配置  关于web.xml配置中的

    web.xml文件的继承   在${CATALINA_HOME}\conf\web.xml中的内容,相当于写到了每个项目的web.xml中,它是所有web.xml的父文件。...每个完整的JavaWeb应用中都需要有web.xml,但我们不知道所有的web.xml文件都有一个共同的父文件,它在Tomcat的conf/web.xml路径。 conf/web.xml 在应用的web.xml中如果没有对进行覆盖,那么默认主页为index.html、index.html、index.jsp 关于web.xml配置中的在webapps目录下的项目名为we] 就会匹配到我们指定的中,即/index然后一步一步找到对应的<...Path 4.我们可以通过使用*.do来过滤请求, 这样如果我们在页面中的请求中添加后缀名.do就可以避免对静态资源的过滤了,也就不需要对静态资源做特殊处理了

    1.8K10

    精尽Spring MVC源码分析 - 寻找遗失的 web.xml

    实现了 Servlet 接口的类在 Servlet 容器中可用于处理请求并发送响应。...的实现类,并且容器将 WEB-INF/lib 目录下 JAR 包中的类都交给该类的 onStartup() 方法处理,我们通常需要在该实现类上使用 @HandlesTypes 注解来指定希望被处理的类...ServletContainerInitializer 的实现类,Web 容器并不会识别它,需要借助 SPI 机制来指定该初始化类,通过在项目 ClassPath 路径下创建 META-INF/services...,无论是 web.xml 中的配置,还是 Servlet3.0 中的 ServletContainerInitializer 和 SpringBoot 的加载流程都没有太大的关联。...一个比较核心的类,一般我们可以从中获取到那些注册在容器中的托管 Bean,而这篇文章,主要分析的便是它在内嵌容器中的实现类:org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext

    81431

    WebApplicationInitializer向左,ServletContextInitializer向右

    如果第三方实现了ServletContainerInitializer接口,并且在其META-INF/目录下的services文件中声明了该实现类,那么Servlet容器可以借助JDK的ServiceLoader...探测到所有第三方实现类,然后Servlet容器将ServletContext对象依次传递给第三方实现类的onStartup()方法(不用头疼ServletContext对象的获取问题了,Servlet容器直接传给你...WebApplicationInitializer接口是Spring为第一种部署模式量身打造的一个接口,即它只能应用于外置Servlet容器中,大家可以在Intellj IDEA中DEBUG运行一个Spring...实现类的呢?...其中在方式三和方式四中,方式四更贴近Spring风格,而方式三是Servlet API 3.0引入的一种原生方式;如果大家深挖方式四的话,其实底层原理依然是通过方式三实现的。

    1.2K30

    spring mvc基于编码配置的原理

    我们配置DispatcherServlet最典型的是使用web.xml文件。...它可以充分利用编译器,在编译期间检查出配置中的错误,另外,这增强了配置的灵活性和可控性,你可以在启动过程中自定义需要的检查验证条件。...Spring mvc是跟着更底层的接口标准servlet走的,servlet3+以后引入ServletContainerInitializer接口,这为去web.xml,基于代码配置提供了一种途径: public...>> c, ServletContext ctx) throws ServletException; } Spring的SpringServletContainerInitializer 类实现了该接口...META-INF/services/javax.servlet.ServletContainerInitializer,文件内声明实现类,进而调用其onStartup方法,如果以后我们要自己实现ServletContainerInitializer

    1.1K100

    关于web.xml配置中的

    http://localhost:8080/we/index时[假设我部署在webapps目录下的项目名为we] 就会匹配到我们指定的中,即/index然后一步一步找到对应的 那我们输入的URL:http://localhost:8080/we/index又是如何与中的/index匹配的呢?...是我们的Servlet的地址,我们称为Servlet Path,这里就是需要与我们的匹配的内容 注:在/index后边我们还可以跟其他的信息,例如:/index?...name=admin&pass=admin 这是其中一种明文表示的方式 标签中*的使用 我们知道在写时有一种通配符的使用写法,即* 1.当我使用<url-pattern...Path 4.我们可以通过使用*.do来过滤请求, 这样如果我们在页面中的请求中添加后缀名.do就可以避免对静态资源的过滤了,也就不需要对静态资源做特殊处理了

    84020

    【小家Spring】探讨注解驱动Spring应用的机制,详解ServiceLoader、SpringFactoriesLoader的使用(以JDBC、spring.factories为例介绍SPI)

    前言 在之前的一篇文章【小家Spring】Spring注解驱动开发—Servlet 3.0整合Spring MVC(不使用web.xml部署描述符,使用ServletContainerInitializer...,返回一个ServiceLoader的实现,而ServiceLoader实现了Iterable接口,所以可以通过ServiceLoader来遍历所有在配置文件中定义的类的实例。...(继承或者实现)的类放在ServletContainerInitializer接口的集合参数c中传递进来。...如果不定义处理类型,或者应用中不存在相应的实现类,则集合参数c为null 这一类实现了SCI(全名:ServletContainerInitializer)的接口,如果做为独立的包发布,在打包时,会在JAR...(); } } // 这一步就是Tomcat专门寻找,并且执行Servlet规范中的`ServletContainerInitializer`的所有的实现类的 /*

    2.1K42

    【SpringBoot源码解析】第三章:SpringBoot通过打成war包的方式是如何启动的

    关于SPI可以去了解我的另一篇文章 Java SPI 机制详解 SPI在springboot中的应用 我们看spring-web这个项目的spi文件javax.servlet.ServletContainerInitializer...ServletContainerInitializer 是 Servlet 3.0 新增的一个接口,主要用于在容器启动阶段通过编程风格注册Filter, Servlet以及Listener,以取代通过web.xml...文件中,那么Tomcat等容器启动的时候就会去调用所有实现类的onStartup方法。...,其本质上是利用了Servlet3.0规范中的Tomcat启动时会去调用ServletContainerInitializer接口的onStartup方法,同时把使用类注解@HandlesTypes中标注的接口的实现类作为参数传入到...onStartup中,并依次调用其实现类的onStartup方法。

    1.1K30
    领券