2
1. BeanFactory fac=new ClassPathXmlApplicationContext("Spring-Config.xml"); 

2. Resource res=new Classpathresource("Spring-Config.xml");
    BeanFactory fac=new XmlBeanFactory(res);

(我发现只有第二种类型我可以指定一个父配置文件来使用

3. ApplicationContext context = new ClassPathXmlApplicationContext("Spring-Config.xml");

我有 3 种加载 beanfactory 的方法,我想知道它们之间有什么区别。如果可能的话,如何在所有这些方法中定义父配置文件?

4

3 回答 3

2

ApplicationContext 继承自 BeanFactory 接口,所以它拥有 BeanFactory 的所有功能,也有额外的功能,下图在 Spring 官网: MessageSource,提供 i18n 风格的消息访问。访问资源,例如 URL 和文件。事件传播到实现 ApplicationListener 接口的 bean。加载多个(分层)上下文,允许每个上下文都集中在一个特定的层上,例如应用程序的 Web 层。

正如你所说,有些代码使用 BeanFactory,有些使用 ApplicationContext,实际上并没有什么不同,但有一点,由于 ApplicationContext 的额外功能,它会更重,并且可以与transaction 和 aop一起使用,这将是非常好的用于容器环境,如Tomcat等。您可以在此处找到更多信息,尤其是第 3.8.1 节。BeanFactory 还是 ApplicationContext?http ://static.springsource.org/spring/docs/2.5.x/reference/beans.html#context-introduction-ctx-vs-beanfactory

于 2013-03-13T05:25:39.673 回答
1

BeanFactory 层次结构显示在此处的图像中。

请注意,这些是接口,一个接口可以有很多 - 许多 - 实现,因此对应不同的获取 bean 的方式。

这是列出BeanFactory Vs ApplicationContext的区别

于 2013-03-13T05:37:31.140 回答
0

BeanFactoryApplicationContext都是从 Spring IOC容器中获取 bean 的方法,但仍然存在一些差异。

BeanFactory是实例化、配置和管理许多 bean 的实际容器。这些 bean 通常相互协作,因此它们之间存在依赖关系。这些依赖关系反映在 BeanFactory 使用的配置数据中。

BeanFactoryApplicationContext都是 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);

不同之处

  1. BeanFactory在调用getBean()方法时实例化 bean,而 ApplicationContext 在容器启动时实例化 Singleton bean,它不会等待调用 getBean()。

  2. BeanFactory不提供对国际化的支持,但ApplicationContext提供了对它的支持。

  3. BeanFactoryApplicationContext之间的另一个区别是能够将事件发布到注册为侦听器的 bean。

  4. BeanFactory接口的流行实现之一是XMLBeanFactoryApplicationContext接口的流行实现之一是ClassPathXmlApplicationContext

  5. 如果您使用自动布线并使用BeanFactory ,则需要使用 API 注册AutoWiredBeanPostProcessor,如果您使用 ApplicationContext ,您可以在 XML 中进行配置。总之BeanFactory可以用于测试和非生产使用,但ApplicationContext是功能更丰富的容器实现,应该比BeanFactory更受青睐

  6. BeanFactory默认支持延迟加载,ApplicationContext默认支持Aggressive加载。

于 2016-01-15T05:28:21.817 回答