主要过程也就是这样:
参考下面代码:
1.读取xml配置文件*/
// 创建SAXReader对象
SAXReader reader = new SAXReader();
// 读取文件 转换成Document,获取当前项目路径
Document document = reader.read(this.getClass().getClassLoader().getResourceAsStream(XmlPath));
//获取节点对象
Element rootElement = document.getRootElement();
//找出根节点的所有element元素
List<Element> elements = rootElement.elements();
Object instance=null;
if(elements!=null){
//2.获取每个bean配置,获取class
for (Element sonElement:elements) {
//获得beanid
String sonbenId = sonElement.attributeValue("id");
if(!beanId.equals(sonbenId)){
continue;
}
//通过sonElement获得class
String beanClassPath = sonElement.attributeValue("class");
//3.拿到class地址,进行反射实例化对象,再通过反射api为私有变量赋值
Class<?> forName = Class.forName(beanClassPath);
//实例化class
instance = forName.newInstance();
//拿到成员属性
List<Element> sonSonEleList = sonElement.elements();
for (Element sonSonEle: sonSonEleList) {
//获取每个bean中的id,name
String name = sonSonEle.attributeValue("name");
String value = sonSonEle.attributeValue("value");
//使用反射为name和value进行赋值
*//*Field fieldName = forName.getDeclaredField(name);*//*
Field fieldName = forName.getDeclaredField(name);
fieldName.setAccessible(true);
fieldName.set(instance,value);
}
}
}
return instance;