SpringFramework核心技术一(IOC:BeanFactory)

简介: 什么是BeanFactory这BeanFactory为Spring的IoC功能提供了基础,但它只能直接用于与其他第三方框架的集成,现在对于Spring的大多数用户来说,它本质上是历史性的。

什么是BeanFactory

这BeanFactory为Spring的IoC功能提供了基础,但它只能直接用于与其他第三方框架的集成,现在对于Spring的大多数用户来说,它本质上是历史性的。在BeanFactory与相关的接口,如BeanFactoryAware,InitializingBean,DisposableBean,仍然存在于Spring为向后兼容性与大量与Spring集成第三方框架的目的。通常第三方组件不能使用更多的现代等价物,例如@PostConstruct或@PreDestroy为了避免依赖JSR-250。


一、使用BeanFactory 还是 ApplicationContext?

使用ApplicationContext,除非你有更好的理由,不去使用他?

由于ApplicationContext包含了所有功能BeanFactory,所以比BeanFactory更建议使用ApplicationContext。除此之外,除了少数情况外,例如在资源受限的设备上运行的嵌入式应用程序,这些应用程序的内存消耗可能很重要,少数几千字节可能会产生差异,可以使用BeanFactory。但是,对于大多数典型的企业应用程序和系统,这ApplicationContext是您将要使用的。Spring 大量使用BeanPostProcessor扩展点(以影响代理等)。如果您仅使用普通BeanFactory,则交易和AOP等相当一部分支持将不会生效,至少在您没有采取某些额外步骤的情况下不会生效。这种情况可能会令人困惑,因为配置没有任何问题。

下表列出了提供的功能BeanFactory和 ApplicationContext接口和实现。
功能矩阵:

特征 BeanFactory BeanFactory
Bean实例化/布线
自动BeanPostProcessor注册 没有
自动BeanFactoryPostProcessor注册 没有
方便的MessageSource访问(国际化) 没有
ApplicationEvent 出版物 没有

要使用实现明确注册bean后处理器BeanFactory,您需要编写如下代码:

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

要BeanFactoryPostProcessor在使用BeanFactory 实现时明确注册,您必须编写如下代码:

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);

在这两种情况下,显式注册步骤都很不方便,这是 绝大多数Spring支持的应用程序ApplicationContext中优先于各种实现的各种实现的一个原因BeanFactory,特别是在使用BeanFactoryPostProcessors和BeanPostProcessors时。这些机制实现了重要的功能,如资产占位符替换和AOP。

结语:在这里只需要知道ApplicationContext包含了BeanFactory的所有功能就可以了。

目录
相关文章
|
2月前
|
XML Java 数据格式
Spring BeanFactory深度讲解
Spring `BeanFactory` 是 Spring 容器的基础,负责创建、配置和管理 Bean 实例,并提供对 Bean 生命周期的管理和控制。它通过读取配置文件或注解来实例化和管理 Bean,支持 XML、Java 配置和注解配置方式。与 `ApplicationContext` 相比,`BeanFactory` 更轻量级,采用延迟加载策略,适用于资源受限的环境。它实现了工厂模式,将对象的创建和管理分离,使应用程序更灵活、可扩展且易于维护。
|
5月前
|
存储 Java C++
理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory
理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory
|
6月前
|
Java Spring 容器
Spring底层原理之 BeanFactory 与 ApplicationContext
Spring底层原理之 BeanFactory 与 ApplicationContext
64 3
|
XML 存储 设计模式
Spring高手之路11——BeanDefinition解密:构建和管理Spring Beans的基石
本文对BeanDefinition进行全面深入的探讨,涵盖BeanDefinition的接口方法、主要信息、类型以及生成过程等方面内容。旨在帮助读者全面理解BeanDefinition的各方面知识,并能够熟练应用。文章通俗易懂,具有很强的指导意义。
192 0
Spring高手之路11——BeanDefinition解密:构建和管理Spring Beans的基石
|
6月前
|
Java C++ Spring
深入Spring原理-1.BeanFactory与ApplicationContext的区别
深入Spring原理-1.BeanFactory与ApplicationContext的区别
94 0
|
11月前
|
XML Java 数据格式
[读书笔记]Spring中BeanFactory和ApplicationContext的联系和区别
[读书笔记]Spring中BeanFactory和ApplicationContext的联系和区别
52 0
|
XML Java API
BeanFactory与ApplicationContext区别和Spring快速入门
BeanFactory与ApplicationContext区别和Spring快速入门
BeanFactory与ApplicationContext区别和Spring快速入门
|
XML Java 数据格式
Spring IoC之BeanFactory
Spring IoC之BeanFactory
185 0
|
Java Spring 数据格式
SpringFramework核心技术一(IOC:注册一个LoadTimeWeaver)
一、什么是LoadTimeWeaver 在LoadTimeWeaver用于由Spring动态变换的类,因为它们被装载到Java虚拟机(JVM)。
2140 0
|
XML Java 数据格式
SpringFramework核心技术五:面向切面编程(AOP)和Spring
面向对象和面向切面两种编程方式的比较 面向方面编程(AOP)通过提供关于程序结构的另一种思考方式来补充面向对象编程(OOP)。
1553 0