关于Spring IOC控制反转一

6 篇文章 0 订阅

1、IOC是什么?

答:IOC-Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。

2、谁控制谁?控制什么?

答: IOC 容器控制依赖对象。控制资源的获取。

3、反转是什么?反转了什么内容或关系?

答:对依赖关系的反转。在程序中我们主动new一个对象主动的去获取依赖对象,这叫做(正转)。反转就是把主动获取依赖对象方式,转到IOC容器中,交给IOC容器管理,并由IOC容器完成对象的注入。对象是被动的接受依赖关系。所以是反转。

图解主动依赖和反转后的差别

      1.主动控制对象

       2.控制反转以后

4、IOC(控制反转)能做什么?

答:把程序中的对象依赖关系转移到配置文件,降低程序耦合。提高代码复用率。

      把对象作为bean。由ioc注入数据。即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

5、DI是什么?

答:DI(依赖注入)就是通过baen注入对象,是IOC的另一个说法。

         谁依赖于谁:应用程序依赖于IoC容器

      为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源

   谁注入谁:IoC容器注入应用程序某个对象,应用程序依赖的对象

         注入了什么:注入某个对象所需要的外部资源(包括对象、资源、常量数据)

6、IOC容器的初始化过程

1.resource定位(资源定位),既beanDeefinition的资源定位(beanDeefinition baen定义)。就是对baen的定位。

2.对beanDeefinition的载入,就是吧baen转换为ioc内部的数据结构。

3.向IOC容易注册bean。让ioc容易持有bean 或者pojo。

4.IOC容器初始化过程的时候,一般不会对bean进行依赖注入。

5.容器初始化和依赖注入是独立的过程。依赖注入一般在程序第一次getbean的时候才

 会触发。或者bean设置lazy-init=true属性。

6.bean为单例,(非(scope = prototype多例模式)的时候在启动的时候就会初始化。

7.beanfactory factorybean的区别

BeanFacotry是一个类工厂,使用它来创建各种类型的Bean,最主要的方法就是getBean(String beanName),该方法从容器中返回特定名称的Bean,只不过其中有一种Bean是FacotryBean.

一个Bean 要想成为FacotryBean,必须实现FactoryBean 这个接口。

     FactoryBean定义了三个接口方法:

     1、Object getObject():返回由FactoryBean创建的Bean的实例,如果isSingleton()方法返回true,是单例的实例,该实例将放入Spring的缓冲池中;

     2、boolean isSingleton*():确定由FactoryBean创建的Bean的作用域是singleton还是prototype;

     3、getObjectType():返回FactoryBean创建的Bean的类型。

FactoryBean 是一直特殊的bean,它实际上也是一个工厂,我们在通过FactoryBeanName得到的Bean,是FacotryBean创建的Bean,即它通过getObject()创建的Bean.我们要想得到FactoryBean本身,必须通过&FactoryBeanName得到,即在BeanFactory中通过getBean(&FactoryBeanName)来得到 FactoryBean

注:在spring 中是通过BeanFactoryUtils.isFactoryDereference()来判断一个Bean是否是FactoryBean.

spring 内部实现中应该是在通过BeanFacotry 的getBean(String beanName) 来得到Bean时,如果这个Bean是一个FactoryBean,则把它生成的Bean返回,否者直接返回Bean.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值