IOC的基本概念

IOC的基本概念

IOC 的全称是Inversion of Control,即控制反转。也可以理解为依赖注入(Dependency Injection)。
宗旨就是让别人为你服务。

在没有使用IOC容器之前,如果某个对象依赖于某个类或者服务,通常是在该对象中主动的去获取依赖的类。

public interface IBehavior {
	public void sleep();
	public void study();
	public void work();
}

public class BehaviorImpl implements IBehavior {
	@Override
	public void sleep() {
		System.out.println("sleep");
	}
	@Override
	public void study() {
	}
	@Override
	public void work() {
	}
}

public class Person {
	private IBehavior behavior;
	public Person() {
	}

	public Person(IBehavior behavior) {
		this.behavior = behavior;
	}
	
	public void sleep() {
		behavior.sleep();
	}
	
	public IBehavior getBehavior() {
		return behavior;
	}

	public void setBehavior(IBehavior behavior) {
		this.behavior = behavior;
	}
	
	public static void main(String[] args) {
		Person person = new Person();
		person.setBehavior(new BehaviorImpl());
		person.sleep();
	}
}

譬如:有一个Person对象,依赖IBehavior的sleep()服务。通常做法,是通过我们主动现在获取到IBehavior对象,然后在调用sleep()服务。但是,我们是否有必要必须要通过主动获取的依赖对象呢?如果有第三方,将Person类在需要调用IBehavior的sleep ()服务时,在将IBehavior对象注入到Person对象中去,进而获取sleep()服务。

IOC主要的作用是在我们需要调用依赖对象的时候,为我们准备好所需要的依赖对象。而不需要我们主动的去获取依赖对象。

IOC注入方式

  1. 接口注入 ,基本上不提倡使用
  2. 构造器注入,就是被注入对象可以通过在其构造方法中声明依赖对象的参数列表,让外部(通常是IoC容器)知道它需要哪些依赖对象。这种注入方式的优点是对象在构造完成时,就已经进入就绪状态可以马上使用。缺点:当依赖对象过多时,构造方法的参数列表比较长。通过反射构造对象时,比较困难。
  3. setter方法注入,缺点就是在对象构造完成时,无法立即进入就绪状态。

IOC的附加值

从主动获取依赖关系的方式转向IOC方式,不只是一个方向上的改变。通过IOC注入不会对业务对象构成很强的入侵性,使用IOC后,对象具有更好的可测试性、可重用性和可扩展性。

猜你喜欢

转载自blog.csdn.net/qq_38936967/article/details/83620401