1.读XML,很简单的了,这里demo用的jdom
有一个XML文件test.xml
<?xml version="1.0" encoding="UTF-8"?>
<HD>
<disk name="C">
<capacity>20G</capacity>
<directories>100</directories>
<files>123456</files>
</disk>
<disk name="D">
<capacity>300G</capacity>
<directories>999</directories>
<files>987654</files>
</disk>
</HD>
然后读:
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
public class JdomSample {
public static void main(String[] args) throws Exception {
final SAXBuilder sb = new SAXBuilder();
final Document doc = sb.build(JdomSample.class.getClassLoader().getResourceAsStream("test.xml")); // 构造文档对象
final Element root = doc.getRootElement(); // 获取根元素HD
final List list = root.getChildren("disk");// 取名字为disk的所有元素
for (int i = 0; i < list.size(); i++) {
final Element element = (Element) list.get(i);
final String name = element.getAttributeValue("name");
final String capacity = element.getChildText("capacity");// 取disk子元素capacity的内容
final String directories = element.getChildText("directories");
final String files = element.getChildText("files");
// 打印输出
System.out.println("磁盘信息:");
System.out.println("分区盘符:" + name);
System.out.println("分区容量:" + capacity);
System.out.println("目录数:" + directories);
System.out.println("文件数:" + files);
System.out.println("-----------------------------------");
}
}
}
结果
磁盘信息:
分区盘符:C
分区容量:20G
目录数:100
文件数:123456
-----------------------------------
磁盘信息:
分区盘符:D
分区容量:300G
目录数:999
文件数:987654
-----------------------------------
2.再看看反射技术:
import java.lang.reflect.Field;
public class ReflectTest {
private final String fname;
private final String lname;
public ReflectTest(String fname, String lname) {
this.fname = fname;
this.lname = lname;
}
public static void main(String[] args) {
try {
final ReflectTest rt = new ReflectTest("java", "aspectj");
fun(rt);
} catch (final Exception e) {
e.printStackTrace();
}
}
public static void fun(Object obj) throws Exception {
final Field[] fields = obj.getClass().getDeclaredFields();
System.out.println("替换之前的:");
for (final Field field : fields) {
System.out.println(field.getName() + "=" + field.get(obj));
if (field.getType().equals(java.lang.String.class)) {
field.setAccessible(true);
// 必须设置为 true 才可以修改成员变量
final String org = (String) field.get(obj);
field.set(obj, org.replaceAll("a", "b"));
}
}
System.out.println("替换之后的:");
for (final Field field : fields) {
System.out.println(field.getName() + "=" + field.get(obj));
}
}
}
结果:
替换之前的:
fname=java
lname=aspectj
替换之后的:
fname=jbvb
lname=bspectj
了解了这两个技术,就可以模拟一个简单的Spring的Ioc了
具体模拟的demo在下一篇demo