一:IOC容器的定义
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找。依赖注入应用比较广泛。
二:Ioc容器相关含义
许多强大的功能都是由两个或是更多的类通过彼此的合作来实现业务逻辑,这使得每个对象和其他的对象产生依赖或者关联。(也就是对象持有其他对象的引用)。如果这个获取过程要靠自身实现,那么如你所见,这将导致代码高度耦合并且难以测试。
工厂模式只是一定程度上降低了这种代码的耦合性,
IoC模式可以彻底解决这种耦合,它把耦合从代码中移出去,放到统一的XML 文件中,通过一个容器在需要的时候把这个依赖关系形成,即把需要的接口实现注入到需要它的类中。这可能就是“依赖注入”说法的来源了。
优点:因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单,只要修改XML就可以了,这样我们甚至可以实现对象的热插拨(象USB)
缺点:1.创建对象的过程变得复杂,对于不习惯这种方式的人,会觉得有些别扭和不直观。
2.对象生成因为是使用反射编程,在效率上有些损耗。但相对于IoC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高
三:IOC容器实现原理
----->ioc容器实现原理项目图
----->beans.xml对应的java类
【1】一个xml节点在可以映射成一个java类。
beans根节点对应的java类
1 package org.shangxiaofei.bjsxt.shang; 2 import java.util.ArrayList; 3 import java.util.List; 4 5 import javax.xml.bind.annotation.XmlElement; 6 import javax.xml.bind.annotation.XmlRootElement; 7 /** 8 * Beans.xml中相当于根节点对应的java对象 9 * @ClassName: Bean 10 * @Description: TODO(这里用一句话描述这个类的作用) 11 * @author 尚晓飞 12 * @date 2014-8-27 下午4:55:19 13 * 14 */ 15 @XmlRootElement 16 public class Beans { 17 //根节点下多有bean对象的集合 18 private List<Bean> list=new ArrayList<Bean>(); 19 20 public Beans() { 21 super(); 22 } 23 24 //name定义的是beans.xml中节点的名字 25 @XmlElement(name="bean") 26 public List<Bean> getList() { 27 return list; 28 } 29 30 public void setList(List<Bean> list) { 31 this.list = list; 32 } 33 34 35 }