GMs*_*soF 25 java spring dependency-injection web-applications
春天的定义ApplicationContext非常模糊,我几乎完成了整本教程,但仍然无法理解它的ApplicationContext立场.
根据Spring API,ApplicationContext是:
用于为应用程序提供配置的中央接口.这在应用程序运行时是只读的,但如果实现支持,则可以重新加载.
用于访问Spring bean容器的根接口.这是bean容器的基本客户端视图.
从上面,我的问题是:
1)我一直看到书中提到的"容器",容器是指什么?一个容器是否意味着一个java进程?或一个容器是指一个ApplicationContext对象?
2)如果我ApplicationContext在一个java应用程序中实例化两个(都在main体内),这两个接口是一个中央容器吗?还是两个单独的实例?看下面的代码,context1和之间有什么区别context2?如果有一个Singleton Beans.xml,它是由context1和context2两个独立的实例或同一个实例调用的?
ApplicationContext context1 = new ClassPathXmlApplicationContext("Beans.xml");
ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans.xml");
Run Code Online (Sandbox Code Playgroud)
Ser*_*sta 23
首先你提问:
1)我一直看到书中提到的"容器",容器是指什么?一个容器是否意味着一个java进程?或一个容器引用一个ApplicationContext对象?
ApplicationContext是中央接口,但底层容器是BeanFactory.更准确地说,BeanFactory是一个较低级别的接口,由您从中获取Bean的所有应用程序上下文实现.在这个意义上,我认为容器这个词 在这里代表BeanFactory- 每个ApplicationContext一个.
2)如果我在一个java应用程序(一个主体)中实例化两个ApplicationContext,这两个接口是否与一个中央容器相连?还是两个不同的实例?请参阅下面的代码,context1和context2之间的区别是什么?如果Beans.xml中有Singleton,它由context1和context2调用,它们是两个分开的实例还是同一个实例?
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);>
Run Code Online (Sandbox Code Playgroud)
在这里,您可以从中检索context1只能在它宣布豆,但context2你会从中检索豆类context2 和 context1.具体来说,首先查找bean context2,如果没有找到,则查找context1.
这在Spring MVC中使用,你通常有一个根上下文(对于所有与MVC没有直接关系的bean DispatcherServlet)和一个专用于它的子上下文DispatcherServlet将包含控制器,视图,拦截器等的bean.
gui*_*ido 14
通过容器,它们指的是核心弹簧Inversion of Control容器.容器提供了一种初始化/引导应用程序(在xml文件或注释中加载配置),通过使用反射,以及管理Java对象(称为bean或托管对象)的生命周期的方法.
在此初始阶段,您在应用程序中没有(通常,但有可能)控制,而在完成引导时,您将获得应用程序的完全初始化状态(或者在发生故障时没有任何内容).
它是所谓的EJB3容器的替代或可能的补充; 然而,春天提供了一个不遵守EJB定义标准.从历史上看,EJB的采用受到该规范的复杂性的限制,spring是一个新创建的项目,用于在J2SE jvm上运行EJB3并且没有EJB容器,并且配置更容易.
ApplicationContext(作为一个接口,并通过直接实现风格)是实现这个IoC容器的意思,而不是BeanFactory现在(一种稀疏使用的)更直接的bean管理方式,顺便说一下,它提供了基本实现ApplicationContext的功能.
根据您的第二个问题,您可以拥有多个ApplicationContexts实例,在这种情况下,它们将完全隔离,每个实例都有自己的配置.
我一直看到书中提到"容器",容器是指什么?一个容器是否意味着一个java进程?或一个容器引用一个ApplicationContext对象?
这里的容器意味着弹簧容器,它只是ApplicationContext.这内部读取spring配置并根据配置加载类.您可能认为它是SpringProcessor,提供各种功能,如bean初始化,注入,i18n,bean后处理等现成的
同
ApplicationContext context1 = new ClassPathXmlApplicationContext("Beans.xml"); ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans.xml");
将有两个conatiners,因此有两个单独的豆.这里单例表示每个容器的单例实例.理想情况下,除非您有两个容器,否则您应该只有一个容器.出于学习目的,理解概念是有意义的
| 归档时间: |
|
| 查看次数: |
30627 次 |
| 最近记录: |