前言
首先思考一个问题,如果你正在做一个复杂的系统,一个系统模块内有几百个功能业务类,这些类需要使用同一些对象来进行工作。那么,你会怎样去管理这些通用且一样的对象呢?
学习过Spring的朋友会知道,Spring框架为此提供了一种非常先进的思想,即IOC(控制反转)。Spring可以理解为一个工厂,负责对象的创建和对象间关系的维护。IoC即控制反转,简单说就是之前需要使用new的方式创建对象,而Spring框架会从XML文件中根据配置的信息来创建对象,然后放进它自己的容器之中。在程序要使用到该对象的时候,自动注入。
下面就来做一个最简单的IOC容器。
1.创建一个实体类,比如学生类,汽车类
2.创建XML文件配置对象的信息
3.编写一个IOC容器类。这个类工作起来,首先加载XML文件,扫描自己配置的对象信息,之后使用反射技术创建对象,最后将这些
对象放进自己的Map集合中(容器)。外部想要调用这些对象,那么就使用Map的键,来拿到这个集合中对应的值(对象)。
编写一个喜闻乐见的Student学生类。
我做的比较简单,没有使用get() set()方法。
后面使用反射技术可以强制给 private 修饰的属性赋值
package cn.haidnor.bean;
public class Student {
/** 学生姓名 */
private String name;
/** 学生性别 */
private String gender;
/** 学生年龄 */
private int age;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
'}';
}
}
创建XML文件,配置对象信息
id 表示在IOC容器(Map)的键
class 表示对象类的全类名
name 表示对象的各种属性名
property下的文本节点表示该属性的值
Lucy
18
female
Tom
21
male
LiLi
23
female
编写IOC容器类
1.首先根据XML中的配置文件,生成学生对象
2.所有的对象都放入到一个Map中
3.提供一个getBean()的方法,传入配置文件中的id,返回对应的对象
package cn.haidnor.core;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBCBExmclass java.lang.Long":
case "long":
field.setLong(instance, Long.parseLong(attributes.get(name)));
break;
case "class java.lang.Short":
case "short":
field.setShort(instance, Short.parseShort(attributes.get(name)));
break;
default:
field.set(instance, attributes.get(name));
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
最后编写测试类
不使用new的方式创建学生对象
使用ioc容器getBean()方法获取对象
调用对象的复写的toString()方法
package http://www.cppcns.comcn.haidnor.test;
import cn.haidnor.bean.Student;
import cn.haidnor.core.SpringIOC;
public class Test {
public static void main(String[] args) {
// 不使用 new 的方式创建对象, 从容器中获取
Student stu1 = (Student) SpringIOC.getBean("stu3");
// 调用学生类的方法,打印信息
System.out.println(stu1.toString());
}
}
运行结果,控制台打印输出的内容
Student{name='LiLi', gender='female', age=23}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
本文标题: 基于Java反射技术实现简单IOC容器
本文地址: http://www.cppcns.com/ruanjian/java/324731.html