做者:竹竿程序员
这章咱们讲Java Spring的Ioc控制反转, DI依赖注入。框架
阅读此文以前,必须深刻理解Java反射原理。dom
一、 Ioc控制反转学习
原来类对象实例的建立都是有程序员本身经过new进行的。控制反转以后,咱们把建立对象的功能交给Spring,到时候咱们直接用就能够了。spa
二、 DI注入xml
class Bclass对象
{ …….blog
}get
class Aclass{源码
Bclass b;
}
好比咱们须要用到Aclass的对象Aobject时候,Spring Ioc帮咱们建立了一个对象。这时候Aobject 里面的b属性为空。Ioc再建立一个Bclass对象,而后经过set方法让b属性引用到Ioc建立的Bclass对象。
三、 模拟Ioc实现
学习一个东西的时候,若是想弄明白,最好想一想框架内部是如何实现的,若是是我作我会怎么实现。下面我就写一个Ioc DI的程序。
Spring就至关于一个Bean工厂,你写好本身的bean,输入配置文件,Spring就能够帮你自动生成bean对象。
下面咱们建立一个Java工程SimulateIoc 模拟Ioc
dom4j包须要,用来解析XML配置文件
咱们先写二个Bean。内容都同样,只是类名不同
定义一个Spring配置文件,咱们起名字叫IocConfig.xml
下面咱们来看一下TestIoc.Java文件
看一下运行结果
经过这个文件咱们能够看出,咱们先建立了一个BeanFactory工厂,而后经过getBean方法得到指定的Bean对象。是否是很神奇,只要经过不一样的名字,咱们就能够得到咱们想要的对象。BeanFactory里面到底作了什么那?
这就是整个BeanFactory实现了。
里面不少都是处理xml的部分,咱们主要看上面的两个标红的地方。
Class bean = Class.forName(cls.getText());
Object obj = bean.newInstance();
Class.forName得到指定类的类类。newInstance()得到指定类的对象。
Method entryPoint = bean.getMethod(attributename, String.class);
entryPoint.invoke(obj,value);
getMethod得到指定方法的方法调用入口。而后调用invoke就会执行方法。
若是想深刻了解上面四句。能够看看Class文件的反射机制。或者看个人另一篇文章。
以上Ioc DI实现过程很是简单,并无考虑太多干扰因素和功能。因此和Spring实现不同,可是原理都是同样的。
项目源码下载地址:http://pan.baidu.com/s/1pKtO5L5