gpt4 book ai didi

Java Spring 多个 ApplicationContext

转载 作者:IT老高 更新时间:2023-10-28 13:49:05 25 4
gpt4 key购买 nike

spring ApplicationContext 的定义很模糊,我几乎看完了一整本书的教程,但仍然无法理解 ApplicationContext 代表什么。

根据 Spring API,ApplicationContext 是:

  • Central interface to provide configuration for an application. This is read-only while the application is running, but may be reloaded if the implementation supports this.

  • The root interface for accessing a Spring bean container. This is the basic client view of a bean container.

从上面,我的问题是:

1) 我经常看到书中提到“容器”,容器指的是什么?一个容器是否意味着一个java进程?还是一个容器引用一个 ApplicationContext 对象?

2) 如果我在一个 java 应用程序中实例化两个 ApplicationContext(都在 main 主体中),这两个接口(interface)是否指向一个中央容器?还是两个单独的实例?看下面的代码,context1context2有什么区别?如果Beans.xml中有Singleton,是由context1context2调用的,是两个独立的实例还是同一个实例?

ApplicationContext context1 = new ClassPathXmlApplicationContext("Beans.xml");
ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans.xml");

最佳答案

首先你的问题:

1) I keep seeing the book mentioned "container", what is the container refer to? One container does it mean one java process? or one container refer to one ApplicationContext object?

ApplicationContext 是中心接口(interface),但底层容器是一个BeanFactory。更准确地说,BeanFactory 是一个较低级别的接口(interface),由您从中获取 Bean 的所有应用程序上下文实现。从这个意义上说,我认为 container 这个词在这里代表 BeanFactory - 每个 ApplicationContext 一个。

2) If i instantiate two ApplicationContext in one java application (one Main body), are these two interface to one central container? Or two separate different instance? See the code below, what is the difference between context1 and context2? If there is a Singleton in Beans.xml, it is invoked by context1 and context2, are they two separated instance or same instance?

ApplicationContext context1 = new ClassPathXmlApplicationContext("Beans.xml"); ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans.xml");>

通过这些实例,您将获得 2 个完全独立的应用程序上下文。在第一个声明的一个 bean 将不会在另一个中找到。

但是

在 Web 应用程序中通常有多个应用程序上下文,因为 Spring 具有 ApplicationContext 层次结构的概念。您可以将它们声明为:

ApplicationContext context1 = new ClassPathXmlApplicationContext("Beans.xml");
ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans.xml", context1);>

在这里,您可以从 context1 中检索仅在其中声明的 bean,但从 context2 中您将检索来自 context2 context1。具体来说,bean 首先在 context2 中查找,如果没有找到,则在 context1 中查找。

这在 Spring MVC 中使用,您通常有一个根上下文(对于与 MVC DispatcherServlet 不直接相关的所有 bean)和一个专用于 DispatcherServlet 的子上下文它将包含 Controller 、 View 、拦截器等的 bean。

关于Java Spring 多个 ApplicationContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29862681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com