gpt4 book ai didi

Java Spring 多个ApplicationContext

转载 作者:行者123 更新时间:2023-12-02 01:29:36 28 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 的所有应用程序上下文实现。从这个意义上说,我认为容器这个词在这里代表 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 上下文1。具体来说,首先在 context2 中查找 bean,如果没有找到,则在 context1 中查找。

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

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

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