IOC

概念:

1、复杂系统分解成互相合作的对象,接着“第三方”解耦各层间的依赖关系,由IOC(Inversion of Control)容器【即Dependency Injection依赖注入】负责对象的创建和维护,容器在运行时动态将依赖对象注入到组件中;


2、即是某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定;

让调用类对某一接口实现类的依赖关系由第三方(容器或协作类)注入,以移除调用类对某一接口实现类的依赖。


3、把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言的的反射编程,根据配置文件中给出的类名生成相应的对象。

类型:

构造函数注入

sprig支持

通过调用类的构造函数,将接口实现类通过构造函数变量传入

被注入对象在其构造方法中声明依赖对象的参数,IoC检查被注入对象的构造方法,取得它所需要的依赖对象列表,进而为其注入相应的对象,IoC负责被注入对象的构造或生命周期

pulic class IClass{
  private One o;
  private Two t;
  public iClass(One o,Two t){
     this.o=o;
     this.t=t;
  }
}
 
 
 
 
 

属性注入

spring支持

通过Setter方法完成调用类所需依赖的注入,使用时调用、更加灵活方便;

 public class A  
{  
     private B b;  
     private C c;  
  
 public void setb(B b) {  
	this.b = b;  
 }  
 
 public void setc(C c) {  
	this.c = c;  
 }  
} 
通过调用set方法为A对象注入所依赖的对象
public class DMove {  

   public void direct(){
   
       B b = new bOne();  
       A a = new A();  
  
       //①调用属性Setter方法注入  
       a.setb(b);   
       a.*();  
   }  
   
} 

接口注入

将调用类所有依赖注入的方法抽取到一个接口中,调用类通过实现该接口提供相应的注入方法

通过接口注入需要额外声明一个接口,增加了类的数目,而且它的效果和属性注入并无本质区别,因此我们不提倡采用这种方式

通过容器完成依赖关系的注入

通过配置文件或注解描述类和类之间的依赖关系,自动完成类的初始化和依赖注入的工作。(反射)


控制反转:

当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方,而不是A主动去创建、维护B


http://www.cnblogs.com/ttrjba/p/3511935.html

http://blog.youkuaiyun.com/xz0125pr/article/details/49129659

http://stamen.iteye.com/blog/1489223/   通俗易懂的文章又一篇

http://blog.youkuaiyun.com/xiaoxing1521025/article/details/8846022

### 控制反转(Inversion of Control, IoC)的概念 控制反转是一种设计原则,用于减少计算机程序之间的耦合度。通过这种模式,对象不再自己创建依赖的对象实例,而是由外部容器负责管理并提供给这些对象使用[^1]。 #### 实现方式 IoC 主要可以通过两种方式进行实现: - **依赖查找**:组件主动从环境中获取所需的资源和服务。 - **依赖注入**:更为推荐的一种方法,即框架会把应用程序所依赖的对象传递给它而不是让其自行创建[^4]。 依赖注入可以进一步细分为三种形式: - 构造器注入 - Setter 方法注入 - 接口注入 下面是一个简单的例子来展示如何利用构造函数来进行依赖注入: ```java public class Service { private final Repository repository; public Service(Repository repository) { // Constructor injection this.repository = repository; } public void performAction() { System.out.println(repository.getData()); } } ``` 在这个案例里,`Service` 类并没有直接去初始化 `Repository` 对象;相反地,这个责任被交给了类的使用者或者是某个配置工具/容器,在这里体现的就是所谓的“控制权”的转移——原本属于 `Service` 的职责现在转交给其他实体处理了。 #### 使用场景与优势 尽管 IoC 提供了许多好处,比如提高了模块间的解耦程度以及简化测试过程等,但是也存在一些挑战。例如理解起来可能比较困难,并且当出现问题时调试也会变得复杂许多。 因此,在决定是否采用 IoC 之前应该仔细考虑项目的需求和技术栈特点,确保能够充分利用该特性所带来的便利之处的同时也要意识到潜在的风险所在。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值