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的所有功能就可以了。

目录
相关文章
|
4月前
|
XML Java 数据格式
Spring BeanFactory深度讲解
Spring `BeanFactory` 是 Spring 容器的基础,负责创建、配置和管理 Bean 实例,并提供对 Bean 生命周期的管理和控制。它通过读取配置文件或注解来实例化和管理 Bean,支持 XML、Java 配置和注解配置方式。与 `ApplicationContext` 相比,`BeanFactory` 更轻量级,采用延迟加载策略,适用于资源受限的环境。它实现了工厂模式,将对象的创建和管理分离,使应用程序更灵活、可扩展且易于维护。
|
7月前
|
存储 Java C++
理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory
理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory
|
8月前
|
Java Spring 容器
Spring底层原理之 BeanFactory 与 ApplicationContext
Spring底层原理之 BeanFactory 与 ApplicationContext
72 3
|
8月前
|
Java C++ Spring
深入Spring原理-1.BeanFactory与ApplicationContext的区别
深入Spring原理-1.BeanFactory与ApplicationContext的区别
105 0
|
XML Java 数据格式
[读书笔记]Spring中BeanFactory和ApplicationContext的联系和区别
[读书笔记]Spring中BeanFactory和ApplicationContext的联系和区别
61 0
|
XML 人工智能 Java
Spring中的BeanFactory和ApplicationContext介绍
Spring中的BeanFactory和ApplicationContext介绍
|
Java Spring 容器
深入理解Spring IOC之扩展篇(三)、InitializingBean、@PostConstruct、SmartInitializingSingleton
深入理解Spring IOC之扩展篇(三)、InitializingBean、@PostConstruct、SmartInitializingSingleton
296 0
|
XML Java 数据格式
Spring IoC之BeanFactory
Spring IoC之BeanFactory
196 0
|
Java Spring 容器
spring温习-BeanFactory与FactoryBean
不管是平时,还是面试,现在对于spring的讨论少了很多,不再像刚进入人们视野时,那么抢眼;spring现在就像空气一样,只要是java构建的项目,十之八九都是建立在spring之上,因此不可轻视 BeanFactory与FactoryBean,好久不见,一时也有些傻傻分不清楚,温习一下
124 0
spring温习-BeanFactory与FactoryBean
|
Java Spring 数据格式
SpringFramework核心技术一(IOC:注册一个LoadTimeWeaver)
一、什么是LoadTimeWeaver 在LoadTimeWeaver用于由Spring动态变换的类,因为它们被装载到Java虚拟机(JVM)。
2157 0