为了账号安全,请及时绑定邮箱和手机立即绑定

Spring框架中applicationContext.xml和Spring-servlet.xml

Spring框架中applicationContext.xml和Spring-servlet.xml

摇曳的蔷薇 2019-06-15 17:16:20
Spring框架中applicationContext.xml和Spring-servlet.xml是applicationContext.xml和spring-servlet.xml在Spring框架中有关联吗?中声明的属性文件applicationContext.xml可供DispatcherServlet?关于一个相关的问题,为什么我需要一个*-servlet.xml完全没有?为什么applicationContext.xml一个人不够?
查看完整描述

3 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

Spring允许在父-子层次结构中定义多个上下文。

这个applicationContext.xml为“根Webapp上下文”定义bean,即与Webapp关联的上下文。

这个spring-servlet.xml(或者其他名称)为一个servlet的应用程序上下文定义bean。在一个Webapp中可以有很多这样的东西,每个Springservlet一个。spring1-servlet.xml对于Servletspring1spring2-servlet.xml对于Servletspring2).

豆子spring-servlet.xml可以引用bean在applicationContext.xml,反之亦然。

所有SpringMVC控制器都必须进入spring-servlet.xml背景。

在大多数简单的情况下,applicationContext.xml上下文是不必要的。它通常用于包含Web应用程序中所有servlet之间共享的bean。如果您只有一个servlet,那么就没有什么意义了,除非您对它有一个特定的用途。


查看完整回答
反对 回复 2019-06-15
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

设想1

在客户端应用程序(应用程序不是web应用程序,例如可能是Swing应用程序)

private static ApplicationContext context = new  ClassPathXmlApplicationContext("test-client.xml");context.getBean(name);

不需要web.xml..ApplicationContext作为获取bean服务的容器。不需要Web服务器容器。在……里面test-client.xml可以有没有远程处理的简单bean,有远程处理的bean。

结语*在场景1中,应用程序上下文和DispatcherServlet没有关系。

设想2

在服务器应用程序(部署在服务器(例如Tomcat)中的应用程序)中。通过客户端程序远程访问服务(例如Swing应用程序)

定义侦听器web.xml

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

在服务器启动时ContextLoaderListener中定义的bean。applicationContext.xml.

假设您在applicationContext.xml:

<import resource="test1.xml" /><import resource="test2.xml" /><import resource="test3.xml" /><import resource="test4.xml" />

bean是从所有四个配置文件实例化的。test1.xmltest2.xmltest3.xmltest4.xml.

结语*在场景2中,应用程序上下文和DispatcherServlet没有关系。

设想3

在一个带有SpringMVC的Web应用程序中。

在……里面web.xml界定:

<servlet>
    <servlet-name>springweb</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    </servlet><servlet-mapping>
    <servlet-name>springweb</servlet-name>
    <url-pattern>*.action</url-pattern></servlet-mapping>

当Tomcat启动时,Springweb-servlet.xml实例化。DispatcherServlet延展FrameworkServlet..在……里面FrameworkServletbean实例化用于SpringWeb。在我们的情况下弹簧网是FrameworkServlet

结语*在场景3中,应用程序上下文和DispatcherServlet没有关系。

设想4

在Web应用程序中使用SpringMVC。Springweb-servlet.xml对于servlet和applicationContext.xml用于访问服务器程序中的业务服务或访问另一个服务器程序中的DB服务。

在……里面web.xml定义如下:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><servlet>
    <servlet-name>springweb</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class></servlet><servlet-mapping>
    <servlet-name>springweb</servlet-name>
    <url-pattern>*.action</url-pattern></servlet-mapping>

在服务器启动时,ContextLoaderListener中定义的bean。applicationContext.xml假设你已在此声明:

<import resource="test1.xml" /><import resource="test2.xml" /><import resource="test3.xml" /><import resource="test4.xml" />

这些bean都是从所有四个实例中实例化的。test1.xmltest2.xmltest3.xmltest4.xml..中定义的bean实例化完成后,applicationContext.xml中定义的beanSpringweb-servlet.xml实例化。

所以实例化顺序是根是应用程序上下文,然后是FrameworkServlet。

现在,这说明了为什么它们在哪种情况下是重要的。


查看完整回答
反对 回复 2019-06-15
?
慕森卡

TA贡献1806条经验 获得超8个赞

我还要补充一点。在……里面spring-servlet.xml我们包括组件扫描控制器包。在下面的示例中,我们包括控制器包的过滤器注释。

<!-- Scans for annotated @Controllers in the classpath --><context:component-scan base-package="org.test.web" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan>

在……里面applicationcontext.xml我们为不包括控制器的剩余包添加过滤器。

<context:component-scan base-package="org.test">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>


查看完整回答
反对 回复 2019-06-15
  • 3 回答
  • 0 关注
  • 888 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号