Java Ioc详解和实现

做者:竹竿程序员

这章咱们讲Java SpringIoc控制反转, 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

相关文章
相关标签/搜索