Java Ioc详解和实现
2016-02-14 16:30
525 查看
作者:竹竿
这章我们讲Java Spring的Ioc控制反转, DI依赖注入。
阅读此文之前,必须深入理解Java反射原理。
1、 Ioc控制反转
原来类对象实例的创建都是有程序员自己通过new进行的。控制反转之后,我们把创建对象的功能交给Spring,到时候我们直接用就可以了。
2、 DI注入
class Bclass
{ …….
}
class Aclass{
Bclass b;
}
比如我们需要用到Aclass的对象Aobject时候,Spring Ioc帮我们创建了一个对象。这时候Aobject 里面的b属性为空。Ioc再创建一个Bclass对象,然后通过set方法让b属性引用到Ioc创建的Bclass对象。
3、 模拟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
这章我们讲Java Spring的Ioc控制反转, DI依赖注入。
阅读此文之前,必须深入理解Java反射原理。
1、 Ioc控制反转
原来类对象实例的创建都是有程序员自己通过new进行的。控制反转之后,我们把创建对象的功能交给Spring,到时候我们直接用就可以了。
2、 DI注入
class Bclass
{ …….
}
class Aclass{
Bclass b;
}
比如我们需要用到Aclass的对象Aobject时候,Spring Ioc帮我们创建了一个对象。这时候Aobject 里面的b属性为空。Ioc再创建一个Bclass对象,然后通过set方法让b属性引用到Ioc创建的Bclass对象。
3、 模拟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
相关文章推荐
- 【SSH】之Struts2和MVC对应
- SpringBoot定时任务说明
- spring(JDBC)事务配置
- spring事务传播属性和隔离级别
- 观察者模式及Java实现例子
- Spring生态
- Spring实现AOP的4种方式
- spring3 和ehcache 整合
- RTTI(RunTime Type Identification,运行时类型识别)
- 在SpringMVC中实现程序启动时加载数据库中内容
- JAVA与C#的区别
- struts2 返回类型
- 2016蓝桥杯假期任务之《关联矩阵》
- Java关键字transient和volatile小结
- Java高级篇 -- List选择及优化
- java设计模式之——策略模式
- Spring 统一的异常访问体系
- java常见的问题
- net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
- 通过Struts源码生成chm格式帮助文档