class User{
private String number;
private String name;
@Override
public String toString() {
return "User{" +
"number='" + number + '\'' +
", name='" + name + '\'' +
'}';
}
}
class ApplicationResouceReader{
private String url;
public ApplicationResouceReader(String url){
this.url=url;
}
public Object getbean(String id) throws Exception {
//获取xml文件
InputStream resourceAsStream = getClass().getClassLoader().getResourceAsStream(url);
SAXReader reader = new SAXReader();
Document doc = reader.read(resourceAsStream);
//解析xml文件获取beanId相同的节点
Element rootElement = doc.getRootElement();
List<Element> Belements = rootElement.elements();
Element ele;
for (int i=0;i<Belements.size();i++) {
ele = Belements.get(i);
if(!ele.attributeValue("id").equals(id)){
continue;
}
String beanClass = ele.attributeValue("class");
Class<?> forName = Class.forName(beanClass);
//解析子节点
//创建对象,并赋值
Object instance = forName.newInstance();
List<Element> Pelements = ele.elements();
for (int j=0;j<Pelements.size();j++){
String key_value = Pelements.get(j).attributeValue("key");
String value_value = Pelements.get(j).attributeValue("value");
Field declaredField = forName.getDeclaredField(key_value);
declaredField.setAccessible(true);
declaredField.set(instance,value_value);
}
return instance;
}
return null;
}
}
public class test {
@Test
public void test() throws Exception {
ApplicationResouceReader applicationResouceReader = new ApplicationResouceReader("Test-IOC.xml");
User user1 = (User) applicationResouceReader.getbean("user2");
System.out.println(user1);
}
}
<?xml version="1.0" encoding="GB2312"?>
<beans>
<bean id="user1" class="User">
<property key="number" value="1"/>
<property key="name" value="张三"/>
</bean>
<bean id="user2" class="User">
<property key="number" value="2"/>
<property key="name" value="李四"/>
</bean>
<bean id="user3" class="User">
<property key="number" value="3"/>
<property key="name" value="王二麻子"/>
</bean>
</beans>