spring ApplicationContext的定义非常模糊,我几乎完成了一整本教程,但仍然无法理解ApplicationContext代表的是什么。
根据Spring,ApplicationContext是:
以上,我的问题是:
1)我经常看到书中提到的“容器”,容器指的是什么?一个容器是否意味着一个java进程?还是一个容器引用一个ApplicationContext对象?
2)如果我在一个java应用程序中实例化两个ApplicationContext (都在main主体中),这两个接口是否指向一个中心容器?还是两个单独的例子?参见下面的代码,context1和context2之间有什么区别?如果Beans.xml中有单例,则context1和context2调用它,它们是两个分开的实例还是同一个实例?
ApplicationContext context1 = new ClassPathXmlApplicationContext("Beans.xml");
ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans.xml");发布于 2015-04-25 08:21:53
根据容器,它们指的是核心弹簧倒置控制容器。容器提供了一种通过使用反射初始化/引导应用程序(在xml文件或注释中加载配置)的方法,并管理称为bean或托管对象的Java对象的生命周期。
在这个初始阶段,您在应用程序中没有(通常是可能的)控制,相反,当引导完成时,您将得到一个完全初始化的应用程序状态(如果它失败了,什么也不做)。
它是对所谓的EJB3容器的替代,或者可能是一种补充;然而,如果没有坚持EJB定义的标准,那么spring就会失败。从历史上看,EJB的采用受到该规范复杂性的限制,spring是一个新创建的项目,用于在EJB3 jvm上运行与J2SE类似的特性,并且没有EJB容器,而且配置要简单得多。
ApplicationContext (作为一个接口,直接实现风格)是实现这个IoC容器的手段,而不是BeanFactory,后者现在是管理bean的(一个很少使用的和) 更直接的方式,顺便说一下,它为ApplicationContext提供了基本的实现特性。
根据您的第二个问题,您可以拥有多个ApplicationContexts实例,在这种情况下,它们将被完全隔离,每个实例都有自己的配置。
发布于 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等级的概念。你可以宣布它们为:
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。
发布于 2015-04-25 08:25:07
我不断地看到书中提到的“容器”,容器指的是什么?一个容器是否意味着一个java进程?还是一个容器引用一个ApplicationContext对象?
这里的容器是弹簧容器,它只不过是ApplicationContext。这在内部读取spring配置,并根据配置加载类。您可能会认为它是SpringProcessor,它提供了各种功能,如bean初始化、注入、i18n、bean后置处理等。
使用 ApplicationContext context1 =新ClassPathXmlApplicationContext("Beans.xml");ApplicationContext context2 =新ClassPathXmlApplicationContext("Beans.xml");
将有两个结合体,因此有两个单子豆。这里,单例意味着每个容器的单例实例。理想情况下,您应该只有一个容器,直到和除非您有理由两个。为了学习的目的,理解概念是有意义的。
https://stackoverflow.com/questions/29862681
复制相似问题