1. BeanFactory fac=new ClassPathXmlApplicationContext("Spring-Config.xml");
2. Resource res=new Classpathresource("Spring-Config.xml");
BeanFactory fac=new XmlBeanFactory(res);
(我发现只有第二种类型我可以指定一个父Configration文件供使用
3. ApplicationContext context = new ClassPathXmlApplicationContext("Spring-Config.xml");
我有三种加载beanfactory的方法,我想知道它们之间有什么区别。 如果可能,如何在所有这些方法中定义父配置文件?
答案 0 :(得分:2)
ApplicationContext派生自BeanFactory接口,因此它具有BeanFactory所具有的所有功能,并且还具有额外的功能,下面是Spring官方网站: MessageSource,提供对i18n风格的消息的访问。 访问资源,例如URL和文件。 事件传播到实现ApplicationListener接口的bean。 加载多个(分层)上下文,允许每个上下文集中在一个特定图层上,例如应用程序的Web图层。
正如你所说的一些代码使用BeanFactory而有些使用ApplicationContext,实际上它没有什么不同,但有一点,因为ApplicationContext的额外功能,它会更加繁重,可以使用事务和aop < / strong>,在容器环境中使用它会非常好,例如Tomcat等。 你可以在这里找到更多,尤其是第3.8.1节。 BeanFactory或ApplicationContext?:http://static.springsource.org/spring/docs/2.5.x/reference/beans.html#context-introduction-ctx-vs-beanfactory
答案 1 :(得分:1)
BeanFactory层次结构显示在图像here中。
请注意,这些是接口,接口可以有很多 - 很多 - 实现,因此有相应的不同方式来获取bean。
的差异答案 2 :(得分:0)
BeanFactory 和 ApplicationContext 都是从你的spring IOC 容器中获取bean的方法,但仍有一些区别。
BeanFactory 是实例化,配置和管理多个bean的实际容器。这些bean通常彼此协作,因此它们之间具有依赖关系。这些依赖关系反映在BeanFactory使用的配置数据中。
BeanFactory 和 ApplicationContext 都是Java接口,ApplicationContext扩展了BeanFactory。它们都是使用XML配置文件的配置。简而言之,BeanFactory提供基本的控制反转( IoC )和依赖注入( DI )功能,而ApplicationContext提供高级功能。
BeanFactory由接口“ org.springframework.beans.factory ”表示BeanFactory,其中有多个实现。
ClassPathResource resource= new ClassPathResource("appConfig.xml");
XmlBeanFactory factory = new XmlBeanFactory(resource);
<强>差分强>
BeanFactory 在调用 getBean()方法时实例化bean,而ApplicationContext在启动容器时实例化Singleton bean,它不等待getBean()被称为。
BeanFactory 不支持国际化,但 ApplicationContext 为其提供支持。
BeanFactory 与 ApplicationContext 之间的另一个区别是能够将事件发布到注册为侦听器的bean。
BeanFactory 界面的一个流行实现是 XMLBeanFactory ,而 ApplicationContext 界面的一个流行实现是的ClassPathXmlApplicationContext 强>
如果您使用自动布线并使用 BeanFactory ,则需要使用API注册 AutoWiredBeanPostProcessor ,如果您使用的是,则可以使用XML进行配置ApplicationContext的即可。总结 BeanFactory 可用于测试和非生产用途,但 ApplicationContext 是功能更丰富的容器实现,应该优于 BeanFactory
BeanFactory 默认支持延迟加载, ApplicationContext 默认支持积极加载。< / p>