依赖注入的三种方式优缺点
1.构造方法注入:
优点:
•在构造方法中体现出对其他类的依赖,一眼就能看出这个类需要其他那些类才能工作。
脱离了IOC框架,这个类仍然可以工作,POJO的概念。
一旦对象初始化成功了,这个对象的状态肯定是正确的。
缺点:
·构造函数会有很多参数(Bad smell)。•有些类是需要默认构造函数的,比如MVC框架的Controller类,一旦使用构造函数注入,就无 法使用默认构造 函数。
•这个类里面的有些方法并不需要用到这些依赖(Bad smell)。
2. Set方法注入:
优点:
·在对象的整个生命周期内,可以随时动态的改变依赖。
·非常灵活。
缺点:
·对象在创建后,被设置依赖对象之前这段时间状态是不对的。
·不直观,无法清晰地表示哪些属性是必须的。
3.方法参数注入
优点:
比较灵活。
缺点:
新加入依赖时会破坏原有的方法签名,如果这个方法已经被其他很多模块用到就很麻烦。
与构造方法注入一样,会有很多参数。
控制反转和依赖注入的区别
控制反转(IoC,Inversion of Control)和依赖注入(DI,Dependency Injection)是两种实现对象依赖关系的设计模式,它们都属于“依赖倒置原则”(Dependency Inversion Principle)的具体实践。尽管它们之间存在密切的联系,但它们侧重点和实现方式有所不同。
1. 控制反转(IoC):
IoC 是一种设计思想,主要目的是将控制权从对象内部转移到外部。它通过依赖外部容器来实现对象之间的解耦。在传统的面向对象编程中,对象之间的依赖关系通常是在类内部通过构造函数或 setter 方法建立的。而在 IoC 中,对象的依赖关系由外部容器(如 Spring Framework)来管理,容器会负责实例化、组装和配置对象。IoC 的主要优点是提高代码的可复用性、可维护性和可测试性。
2. 依赖注入(DI):
DI 是一种实现 IoC 思想的具体方法,通过将对象的依赖关系注入到对象内部,使得对象之间的依赖关系更为清晰。DI 可以分为构造器注入、Setter 注入和接口注入三种方式。在 DI 中,对象的依赖关系是由外部容器注入的,而不是在类内部创建的。通过 DI,我们可以实现对象之间的解耦,降低代码的耦合度,提高代码的可维护性和可测试性。
总结:
控制反转(IoC)是一种设计思想,目的是将控制权从对象内部转移到外部,实现对象之间的解耦。依赖注入(DI)是一种实现 IoC 思想的具体方法,通过将对象的依赖关系注入到对象内部,实现对象之间的解耦。IoC 和 DI 都属于“依赖倒置原则”的具体实践,它们共同致力于提高代码的可复用性、可维护性和可测试性。
控制反转(Controlled Inversion)和依赖注入(Dependency Injection,DI)是两种软件设计模式,它们都涉及到将一个对象的生命周期延长到其依赖的对象上。然而,它们之间存在一些关键的区别:
1. 控制反转模式 控制反转模式中,对象不再直接创建或获取它们所依赖的对象,而是通过构造函数、属性或方法等外部传递依赖项。在这种情况下,对象只需要声明它所依赖的对象的接口或抽象类,而不需要实现它们。因此,在控制反转模式中,对象之间的依赖关系是被动的。
2. 依赖注入模式 依赖注入模式中,对象通过构造函数、属性或方法等内部创建或获取它们所依赖的对象。在这种情况下,对象需要直接创建或获取它们所依赖的对象的实际实例。因此,在依赖注入模式中对象之间的依赖关系是主动的。 总的来说,控制反转更适用于松耦合的情况,而依赖于注入则更适用于紧耦合的情况。在实际开发中,我们可以根据具体项目的需求和架构来选择使用哪种模式。