Spring IOC

Spring IOC

  • IOC = Inversion Of Control 控制反转。将设计好的对象放入容器,而不是在对象内部进行控制。
  • 传统意义上,直接在对象内部创建对象,是程序主动依赖于对象。
  • 然而,Spring有自己的容器,对象注册在容器中由Spring去管理对象的创建。
  • 我自己认为控制反转是指,从”当前对象中去主动控制(实例化)对象“反转成“Spring容器去控制对象,当前对象是是被动的接受对象”

IOC有什么优点?

  • IOC或依赖注入减少了应用程序的代码量。它使得应用程序的测试很简单,因为在单元测试中不再需要单例或JNDI查找机制。简单的实现以及较少的干扰机制使得松耦合得以实现。IOC容器支持勤性单例及延迟加载服务。

容器生命周期

  1. 初始化Bean
  2. 填充属性
  3. 调用BeanNameAware接口的setBeanName方法,设置bean的id
  4. 调用BeanFactoryAware接口的setBeanFactory方法,传递BeanFactory
  5. 调用ApplicationContextAware接口的setApplicationContext方法,传递ApplicationContext
  6. 调用BeanPostProcessor接口的PostProcessBeforeInitialization方法
  7. 调用InitializingBean接口的afterSetProperties方法
  8. 调用定制的init-method
  9. 调用BeanPostProcessor接口的PostProcessAfterInitialization方法
  10. 调用Disposable接口的Destory方法
  11. 调用定制的destory-method

实现

  • 依赖注入

加载

  1. 获取配置文件资源
  2. 对获取的xml资源进行一定的处理检验
  3. 处理包装资源
  4. 解析处理包装过后的资源
  5. 加载提取bean并注册(添加到beanDefinitionMap中)

ApplicationContext

  • EnvironmentCapable 获得Evironment
  • ListableBeanFactory bean全部加载
  • HierarchicalBeanFactory 载入多个继承关系的上下文
  • MessageSource Spring国际化消息
  • ApplicationEventPublisher 时间发送
  • ResourcePatternResolve 获取资源

 

BeanFactory

懒加载bean

 

FactoryBean

实现Bean的代理,从BeanFactory.getBean(id)获得的对i想是FactoryBean.getObject()返回的对象

 

容器扩展点 

使用FactoryBean来定制实例化逻辑

使用BeanFactoryPostProcessor来自定义配置数据

使用BeanPostProcessor来定制bean

RequiredAnnotationBeanPostProcessor

AutowiredAnnotationBeanPostProcessor

CommonAnnotationBeanPostProcessor

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值