这里将模仿Spring实现一种基于xml配置文件的依赖注入机制。文件中将实现3中注入,一是单值注入 ,包括int,float,double,char等,也包括String注入;二是Java容器注入,包括List,Set,Map三种 容器的注入,最后一种是java bean对象注入。 实现的机制是,使
这里将模仿Spring实现一种基于xml配置文件的依赖注入机制。文件中将实现3中注入,一是单值注入 ,包括int,float,double,char等,也包括String注入;二是Java容器注入,包括List,Set,Map三种 容器的注入,最后一种是java bean对象注入。
实现的机制是,使用Dom4j对xml配置文件进行解析,这里使用dom4j的Element Handler机制,一种类 似与责任链模式的实现机制;对于java对象的构建使用反射机制,这里主要是针对得到的类的Field进行 set赋值。我试图通过调用Method的invoke方法调用类本身的setter方法,但是由于通过xml解析得到的值 都是String,如果将这些String动态的转换为相应的确定类型是个难点,Method的invoke方法,如果形参 是int,而传入java.lang.Integer,它不会认,所以尝试失败,只能通过Field的set方法传入特定值。
配置文件setting.xml
ZJ
26
1.78
Mary
27
1.66
java
c
windows
tom
cat
dog
CHINA
JAPAN
KOREA
依据setting.xml,这里将构建两个Person类的实例me和you:
Person.java
package com.zj.ioc.di.imp;
public class Person {
private String name;
private int age;
private float height;
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public int getAge() {return age;}
public void setAge(int age) {this.age = age;}
public float getHeight() {return height;}
public void setHeight(float height) {this.height = height;}
}
紧接着,构建一个ListOne的实例myList:
ListOne.java
package com.zj.ioc.di.imp;
import java.util.List;
public class ListOne {
private Listmsg;