IOC、DI与容器的理解

IOC、DI与容器

一、IOC
IOC(Inversion of Control)——控制反转。IOC是一种设计思想,在传统的Java编程中,一个对象A想要引用其他的对象B,都需要在A内部进行new操作,也就是说A依赖B,这样子就产生了高度的耦合性,每次使用的时候都需要A主动去创建。
在Spring中,这样一种高耦合性的关系得到了改变,Spring在创建类的实例前会先创建一个容器的实例,然后把所有Bean实例化后的对象放进容器中,当对象A需要容器中的对象B时,容器就把对象B交给A使用。
综上,控制反转是指创建对象的控制权从原先的应用程序转移到了Spring IOC容器上,应用程序获得依赖对象的方式从原来的主动创建变成现在的被动接受,这就是反转。这样一种设计结构使整个程序的结构变得十分灵活。

二、DI
DI(Dependency Injection)——依赖注入。DI和IOC都是对同一种思想的不同描述;,另一种类型是DL(依赖查找Dependency Lookup)。DI是组件之间的依赖关系由容器在运行时候注入。比如对象A要操作数据库,传统的方式是在A中编写一个Connection对象,在Spring中只需要告诉容器A需要一个Connection对象,容器就会在运行的时候自动构造一个对象交给A,而A不需要知道怎么构造,何时构造。
DI是基于Java1.3以后的反射机制实现的,反射机制允许程序在运行的时候动态地生成对象、执行对象的方法、修改对象的属性。

三、IOC容器
IOC容器的本质上也是一个JavaBean,它是由Java编写的,相比起其他Javabean,IOC容器的功能比较特殊,它可以存放其它对象,并为这些对象提供了访问途径,比如context.getBean(“Bean_name”);我们可以理解成集合或者数组这些容器。
IOC容器有两种,一种是早期的BeanFactory,一种是ApplicationContext。
**BeanFactory:**BeanFactory是IOC容器的底层实现,它提供了IOC容器的基础功能,BeanFactory只是一个接口,最常用的实现类是XmlBeanFactory。
**ApplicationContext:**ApplicationContext接口是BeanFactory接口派生出来的,所以提供了BeanFactory所有的功能,并且扩展了许多功能。

四、BeanFactory和ApplicationContext的区别:
两者都通过xml文件加载Bean,但是在加载的方式上BeanFactory提供的是延迟加载,即一开始只是提供一个默认对象,需要注入的时候才会真正实例化Javabean。而ApplicationContext则在一开始就会全部加载并检查,这样的好处是能够及时检查依赖是否完全注入。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值