spring IOC原理

首先我们认识下spring容器,BeanFactory和ApplicationContext,由于后者是建立在前者之上的,我们先看前者。

它有个BeanFactory接口,定义了如何访问管理容器内的Bean方法

还有个BeanDefinitionRegistry接口,专门管理Bean的注册,配置

默认一个DefaultListableBeanFactory实现了上述两接口。而Bean的注册信息即BeanDefinition可通过bindViaCode方法来自行编码完成注册,也可分别通过bindViaproperties或bindViaXml方法利用BeanDefinitionReader来载入properties文件或xml配置文件注册。现在最常用的就是通过xml文件来配置,可用Setter方法注入或构造方法注入(点击查看:Spring Ioc的一个Demo)。

 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

当注册好Bean之后,就等着容器启动还有调用啦。

如果用的是BeanFatory容器,那它默认是延迟加载实例化Bean的,即当你用到这个Bean时它才帮你实例化了送过来;

如果用的是ApplicationContext容器,那是可容器一启动即实例化所有的Bean的。这个好用!!常用!!

 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

从Bean的实例化到准备就绪等待使用中间还要走好常的路呢,

首先容器启动的时候,有时我们还需要对配置文件做一些处理,如${jdbc.passwd}此类占位符的二次加载啊还有其他对配置文件的再处理的,我们会用到BeanFactoryPostProcessor

然后Bean实例化后并不马上成为就绪状态,这时候BeanWrapper会对其包裹返回一个BeanWrapper实例,

下阶段是设置初始属性值,接下来就是Aware接口,依赖注入就是靠这个实现啦,它要检查是否还有需要其他Bean的注入

之后进入关键的BeanPostProcessor处理,为什么说是关键的呢,因为在这个阶段会做一些诸如生成代理的行为,Spring AOP(点击查看:Spring Aop 原理总结)就靠它了,还有初始化方法啊都在这里。总之,就是一个本来很纯净的Bean,我们将我们所需要的东西都加工上去,最后返回它的一个代理。




----spring的后处理

后处理器不就是AOP吗
配置文件中不设置ID,不对外提供服务

bean后处理器(可以对bean初始化前和后进行额外处理)
BeanPostProcessor一个简单了bean后处理器
spring提供两个常用的后处理器
BeanNameAutoProxyCreator 根据bean实例的name属性,创建bean实例的代理
DefaultAdvisorAutoProxyCreator 根据提供的Advisor,对容器中所有bean实例创建代理

容器后处理器
BeanFactoryPostProcessor
另外还有
PropertyPlaceholderConfigurer属性占位符配置器
PropertyOverrideConfigurer重写占位符配置器
CustomAutowireConfigurer自定义自动装配的配置器
CustomScopeConfigurer自定义作用域的配置器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值