关于IOC/DI的理解

本文详细解析了IoC(Inversion of Control)与DI(Dependency Injection)的概念与工作原理,阐述了两者如何改变了传统编程中对象间的依赖关系,通过具体的代码示例说明了IoC/DI的具体应用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.参与者,一般情况下是三方参与,一个是某个对象,另一个是IoC/DI的容器,还有一个世纪某个对象的外部资源。
  某个对象是指任意的,普通的java对象。Ioc/DI容器简单说就是指用来实现Ioc/DI功能的一个框架程序,对象的外部资源
  指的就是对象需要的,但是是从对象外部获取的,都统称为资源,比如,对象需要的其他对象,或者对象需要的文件资源等。
2.谁依赖于谁,当然是某个对象依赖于IoC/DI的容器了。
3.为什么需要依赖,对象需要IoC/DI容器来提供对象需要的外部资源。
4.谁注入了谁,很明显是IoC/DI容器注入某个对象。
5.到底注入了什么,就是注入某个对象所需要的外部资源。
6.谁控制谁,当然是IoC/DI容器控制对象了。
7.控制什么,主要是控制对象实例的创建。
8.为何叫反转,先看看正向的。如果要在A里面使用C,当然是直接在A里面去创建C的对象
  反向就是说 A类不再主动去获取C,而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向地注入到A类中。
9.小结:其实IoC/DI对编程带来的最大改变不是在代码上,而是在思想上,发生了“主从换位”的变化。
      应用程序员来是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,

      被动地等待IoC/DI容器来创建并注入它所需要的资源中。

10.IoC/DI  vs 工厂方法代码的对比

public class A{
	//等待被注入进来
	private C c = null;
	//注入资源C的方法
	public void setC(C c){
		this.c = c;
	}
	
	public void t1(){
		//这里需要使用C,可以又不能主动去创建C了,怎么办?
		//反正就要求从外部注入,这样更省心,
		//自己不用管怎么获取C,直接使用就好了
		c.tc();
	}
}

public interface C{
	public void tc();
}


-------------------------------------------------------

public abstract class A1{
	//工厂方法,创建C1,类似于从子类注入进来的途径
	protected abstract C1 createC1();

	public void t1(){
	 //这里需要使用C1类,可以不知道究竟使用哪一个
	 //也就不主动去创建C1了,怎么办?
	 //反正会在子类里面实现,这里不用管怎么获取C1,直接使用就好了
	 createC1().tc();
	}
}

public class A2 extends A1{
	protected C1 createC1(){
	//真正的选择具体实现,并创建对象
	return new C2();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值