BeanFactory实现

时间:2012-03-15 19:17:05

标签: java spring java-ee

我正在阅读Pro Spring 2.5,我在第2章有一个问题,你在那里建立一个简单的bean工厂。他们谈论“bean registery”,这是“地图”,它保存从属性文件中读取的列表(可以是我假设的任何格式)?

因此,如果这是正确的,BeanFactory基本上就是这样做的:

  • 创建bean工厂并读取配置文件
  • 将配置文件的内容放入注册表(地图,对象列表)
  • 客户端使用bean名称调用getBean方法,然后工厂使用注册表来查找它并实例化它。

这是对的吗?

他们谈到将BeanRegistery提取到接口然后BeanFactory实现了这个接口,但我猜原理是一样的吗?它仅用于良好的编码目的吗?

2 个答案:

答案 0 :(得分:2)

我相信你指的是BeanDefinitionRegistry。它只是作为一种跟踪BeanDefinition对象的方式(即你在xml文件中放入的内容,假设你正在使用xml)。

实现不必进行任何实例化。这留给了BeanFactory实现。通常情况就是这样:

  1. BeanFactory通常构造BeanDefinitionReader
  2. BeanDefinitionReader将获取bean定义(通常来自xml)并使用BeanDefinitionRegistry注册
  3. BeanFactory将向BeanDefinitionRegistry请求BeanDefinition,然后实例化它。
  4. 实际上,BeanFactory和BeanDefinitionRegistry是同一个类,BeanFactoryImplementation将实例化相应的BeanDefinitionReader。

    使用org.springframework.context.support.ClassPathXmlApplicationContext实现BeanDefinitionRegistry和BeanFactory,并在内部构造一个XmlBeanDefinitionReader,并控制组件之间的交互。

答案 1 :(得分:0)

不,你不必做任何这些。这比你想的要容易得多。

得到一个ApplicationContext,你很高兴。它读取配置,创建并连接bean,并按名称提供它们。

如果您没有编写Web应用程序,

ClassPathXmlApplicationContext是具体实现的不错选择。您可以从类路径中的目录加载所有配置。