Spring的核心之IOC容器(二)

本文深入探讨了Spring框架中Application和BeanFactory的区别,包括它们的功能、初始化过程和使用方式。详细解析了BeanFactory的局限性以及ApplicationContext如何克服这些限制,提供更强大的功能,如AOP支持、资源访问和事件管理。同时,文章还介绍了IOC容器的创建和初始化流程,包括BeanDefinition的读取、解析和注册。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 Application和BeanFactory区别:
1 BeanFactory提供了配置框架及基本功能,但无法支持Spring的aop功能和web应用
ApplicationContext提供BeanFactory的所有功能,Application还扩展以下功能:
支持不同的信息源,messageresource
资源访问,如:url和文件
支持aop特性,即支持应用事件
2 BeanFactory采用延迟加载的方式注入bean,即调用getbean()时才加载实例化,难以发现存在的Spring配置问题
ApplicationContext在容器启动时一次性创建了所有的bean

3 BeanFactory和ApplicationContext都支持BeanPostprocessor,BeanFactoryPostprocessor,
但是前者是主动注册,后者是自动注册。

二 IOC容器的使用:
1 创建Ioc配置中的抽象资源,包括BeanDefinition的定义信息
2 创建一个BeanFactory,这里使用的是DefaultListStableBeanFactory
3 创建一个BeanDefinition的读取器,这里使用的是XMLBeanDefinitionReader
4 载入loadBeanDefinition()

代码:
ClassPathResource res = new ClassPathresource(“bean.xml”);
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinition(res);

三 IOC容器的初始化:
1 Resource定位
初始化从构造方法的refresh()方法开始,
refresh调用refreshBeanFactory()方法,通过createBeanFactory构建了DefaultListableBeanFactory,
启动loadBeanDefinitions来载入BeanDefinition,然后利用abstractBeanDefinitionReader里的ResourceLoader解析resource,完成Resource定位

2 BeanDefinition的载入
通过xmlBeanDefinitionReader对象去载入和解析BeanDefinition,最后通过DenifitionParseDelegate去解析XML

3 IOC容器注册BeanDefinition
注册则是调用DefaultListableBeanFactory的registerBeanDefinistion()方法,通过HashMap来持有载入的BeanDefinition,即DefaultListableBeanFactory里的beanDefinitionMap。完成注册后DefaultListableBeanFactory容器中建立了bean的配置信息,初始化完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值