IoC容器篇(十六)——BeanFactory
阿新 • • 發佈:2018-12-09
目錄
BeanFactory
BeanFactory提供了IoC容器功能的根本基礎,但它只在與第三方框架的整合中使用,對於大多數使用者來說BeanFactory已經成為了歷史。
BeanFactory以及相關的介面(eg:BeanFactoryAware、InitializingBean、DisposableBean)仍然存在於Spring中的主要原因是為了與大量集成了Spring的第三方框架向後相容。
1.BeanFactory or ApplicationContext?
除非有更好的理由不這麼做,否則使用ApplicationContext。
ApplicationContext完全包含了BeanFactory的功能。
Spring大量使用了BeanPostProcessor擴充套件點。如果只使用簡單的BeanFactory,相當數量的功能(eg:AOP與事務)支援將無法運作,至少需要新增額外的步驟。
BeanFactory註冊pos-processor
DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); // populate the factory with bean definitions // now register any needed BeanPostProcessor instances MyBeanPostProcessor postProcessor = new MyBeanPostProcessor(); factory.addBeanPostProcessor(postProcessor); // now start using the factory
BeanFactory註冊BeanFactoryPostProcessor
DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory); reader.loadBeanDefinitions(new FileSystemResource("beans.xml")); // bring in some property values from a Properties file PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer(); cfg.setLocation(new FileSystemResource("jdbc.properties")); // now actually do the replacement cfg.postProcessBeanFactory(factory);
note:BeanFactory的配置與ApplicationContext相比,較為繁瑣不便。