应用程序在Spring Framework中.xml text.xml和spring-servlet.xml之间的区别方案 1方案 2方案 3方案 4

2022-08-31 04:42:56
  • 在春季框架中是否相关?applicationContext.xmlspring-servlet.xml
  • 中声明的属性文件是否可用于 ?applicationContext.xmlDispatcherServlet
  • 在相关的说明中,为什么我需要一个?为什么单靠自己是不够的?*-servlet.xmlapplicationContext.xml

答案 1

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

定义“根 web 应用程序上下文”的 bean,即与 web 应用程序关联的上下文。applicationContext.xml

(或者你称之为它的其他任何东西)定义了一个 servlet 的应用程序上下文的 bean。在Web应用程序中可以有很多这样的应用程序,每个Spring servlet一个(例如 对于 servlet ,对于 servlet )。spring-servlet.xmlspring1-servlet.xmlspring1spring2-servlet.xmlspring2

中的 Bean 可以引用 中的 Bean,但反之亦然。spring-servlet.xmlapplicationContext.xml

所有Spring MVC控制器都必须在上下文中进行。spring-servlet.xml

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


答案 2

方案 1

在客户端应用程序中(应用程序不是Web应用程序,例如可能是swing应用程序)

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

context.getBean(name);

无需网络.xml。ApplicationContext 作为用于获取 Bean 服务的容器。无需 Web 服务器容器。在测试客户端中.xml可以有没有远程处理的Simple Bean,有远程处理的Bean。

结论:在方案 1 应用程序中,上下文和不相关。DispatcherServlet

方案 2

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

在 Web 中定义侦听器.xml

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

在服务器启动时,实例化应用程序Context中定义的bean.xml。ContextLoaderListener

假设您在 applicationContext 中定义了以下内容.xml:

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

这些 bean 是从所有四个配置文件 test1.xml test2.xml test3.xml test4.xml 实例化的。

结论:在方案 2 应用程序中,上下文和不相关。DispatcherServlet

方案 3

在具有弹簧MVC的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中定义的bean被实例化。 延伸。在豆子实例化发生在弹簧网。在我们的例子中,springweb是FrameworkServlet。DispatcherServletFrameworkServletFrameworkServlet

结论:在方案 3 应用程序中上下文和不相关。DispatcherServlet

方案 4

在具有弹簧MVC的Web应用程序中。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>

在服务器启动时,实例化在 applicationContext 中定义的 bean.xml;假设您已在此声明:ContextLoaderListener

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

这些 bean 都是从所有四个 test1.xml test2.xml test3.xml test4.xml 实例化的。在 applicationContext 中定义的 bean 实例化完成后.xml,在 springweb-servlet.xml 中定义的 bean 将被实例化。

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

现在应该清楚为什么它们在哪种情况下很重要。


推荐