spring IOC和DI的概念以及原理

依赖注入DI和控制反转IOC的区别?

控制反转和依赖注入之间的关系讲解的比较好的原文地址:https://blog.csdn.net/sinat_21843047/article/details/80297951

总结:

IOC控制了什么?IOC控制了对象的创建以及外部资源的获取,因为传统的java se项目我们一般在对象内部通过new Object()的形式在内部创建所需的对象,而现在设计好的对象直接交由ioc容器去创建管理,即IOC容器控制了对象,以及外部资源的获取。

什么是反转?正转即为我们主动在对象内部创建依赖对象,而现在反转是容器帮忙创建查找以及注入对象,而对象只是被动的接受依赖,即依赖对象的获取方式被反转了。

好处:IOC带来的最主要的改变不是在代码上,而是在思想上,发生了“主从换位”的变化,因为传统的应用程序是主动出击去获取资源,而现在应用程序是被动的等待接受IOC容器创建并注入所需的资源。

DI:主要是对象依赖IOC容器去获取外部资源(对象,常量,资源等),依赖注入的目的并不是为系统增加功能,而是提高组件的重用频率,通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

目前主要由三种注入方式

接口注入。从注入方式的使用上来说,接口注入是现在不甚提倡的一种方式,基本处于“退役状态”。因为它强制被注入对象实现不必要的接口,带有侵入性。而构造方法注入和setter方法注入则不需要如此。

构造方法注入。这种注入方式的优点就是,对象在构造完成之后,即已进入就绪状态,可以马上使用。缺点就是,当依赖对象比较多的时候,构造方法的参数列表会比较长。而通过反射构造对象的时候,对相同类型的参数的处理会比较困难,维护和使用上也比较麻烦。而且在Java中,构造方法无法被继承,无法设置默认值。对于非必须的依赖处理,可能需要引入多个构造方法,而参数数量的变动可能造成维护上的不便。

setter方法注入。因为方法可以命名,所以setter方法注入在描述性上要比构造方法注入好一些。 另外,setter方法可以被继承,允许设置默认值,而且有良好的IDE支持。缺点当然就是对象无法在构造完成后马上进入就绪状态。

发布了18 篇原创文章 · 获赞 0 · 访问量 459

猜你喜欢

转载自blog.csdn.net/qq_36236038/article/details/104361054