首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java多重ApplicationContext

Java多重ApplicationContext
EN

Stack Overflow用户
提问于 2015-04-25 08:08:42
回答 7查看 52.4K关注 0票数 37

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

根据Spring,ApplicationContext是:

  • 为应用程序提供配置的中央接口。在应用程序运行时,这是只读的,但如果实现支持这一点,则可能重新加载。
  • 用于访问Spring容器的根接口。这是bean容器的基本客户端视图。

以上,我的问题是:

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

2)如果我在一个java应用程序中实例化两个ApplicationContext (都在main主体中),这两个接口是否指向一个中心容器?还是两个单独的例子?参见下面的代码,context1context2之间有什么区别?如果Beans.xml中有单例,则context1context2调用它,它们是两个分开的实例还是同一个实例?

代码语言:javascript
复制
ApplicationContext context1 = new ClassPathXmlApplicationContext("Beans.xml");
ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans.xml");
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-04-25 08:21:53

根据容器,它们指的是核心弹簧倒置控制容器。容器提供了一种通过使用反射初始化/引导应用程序(在xml文件或注释中加载配置)的方法,并管理称为bean或托管对象的Java对象的生命周期。

在这个初始阶段,您在应用程序中没有(通常是可能的)控制,相反,当引导完成时,您将得到一个完全初始化的应用程序状态(如果它失败了,什么也不做)。

它是对所谓的EJB3容器的替代,或者可能是一种补充;然而,如果没有坚持EJB定义的标准,那么spring就会失败。从历史上看,EJB的采用受到该规范复杂性的限制,spring是一个新创建的项目,用于在EJB3 jvm上运行与J2SE类似的特性,并且没有EJB容器,而且配置要简单得多。

ApplicationContext (作为一个接口,直接实现风格)是实现这个IoC容器的手段,而不是BeanFactory,后者现在是管理bean的(一个很少使用的和) 更直接的方式,顺便说一下,它为ApplicationContext提供了基本的实现特性。

根据您的第二个问题,您可以拥有多个ApplicationContexts实例,在这种情况下,它们将被完全隔离,每个实例都有自己的配置。

票数 18
EN

Stack Overflow用户

发布于 2015-04-25 08:51:08

首先你们的问题是:

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

ApplicationContext是中心接口,但底层容器是BeanFactory。更确切地说,BeanFactory是一个低级接口,由您获取Beans的所有应用程序上下文实现。从这个意义上讲,我认为容器这个词代表BeanFactory --每ApplicationContext一个。

2)如果我在一个java应用程序(一个主体)中实例化两个ApplicationContext,这两个接口是否指向一个中心容器?还是两个不同的例子?参见下面的代码,context1和context2之间有什么区别?如果Beans.xml中有单例,则context1和context2调用它,它们是两个分开的实例还是同一个实例? ApplicationContext context1 = new ClassPathXmlApplicationContext("Beans.xml");ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans.xml");>

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

在Web应用程序中有多个应用程序上下文是很常见的,因为Spring有一个ApplicationContext等级的概念。你可以宣布它们为:

代码语言:javascript
复制
ApplicationContext context1 = new ClassPathXmlApplicationContext("Beans.xml");
ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans.xml", context1);>

在这里,您可以只从context1中声明的bean检索,但从context2中可以从context2 context1检索bean。具体来说,bean首先在context2中查找,如果找不到,则在context1中查找。

这在Spring中使用,您通常有一个根上下文(对于与MVC DispatcherServlet没有直接关系的所有bean)和一个专门用于DispatcherServlet的子上下文,它将包含控制器、视图、拦截器等方面的bean。

票数 33
EN

Stack Overflow用户

发布于 2015-04-25 08:25:07

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

这里的容器是弹簧容器,它只不过是ApplicationContext。这在内部读取spring配置,并根据配置加载类。您可能会认为它是SpringProcessor,它提供了各种功能,如bean初始化、注入、i18n、bean后置处理等。

使用 ApplicationContext context1 =新ClassPathXmlApplicationContext("Beans.xml");ApplicationContext context2 =新ClassPathXmlApplicationContext("Beans.xml");

将有两个结合体,因此有两个单子豆。这里,单例意味着每个容器的单例实例。理想情况下,您应该只有一个容器,直到和除非您有理由两个。为了学习的目的,理解概念是有意义的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29862681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档