学习工作当中用到了那么多的框架,难免会想搞清楚这些框架的底层到底是怎样实现的,借此机会从简单的写起,尝试着去实现一个框架
一,通过解析xml,获取其中的字段,用反射技术调用类中的方法
技术:dom4j,java反射
1,定义一个接口
package com.epro.framework;
public interface Ihello {
public void sayHello();
}
2,实现类
package com.epro.framework;
public class HelloJava implements Ihello{
@Override
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("hello Java!!!!!!");
}
}
------------------------------------------------------------------------
package com.epro.framework;
public class HelloWorld implements Ihello{
@Override
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("hello World!!!!!!!!!1");
}
}
3,配置文件mybean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="helloWorld" class="com.epro.framework.HelloWorld"></bean>
<bean id="helloJava" class="com.epro.framework.HelloJava"></bean>
</beans>
4,写一个主方法调用
package com.epro.framework;
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TestFrameWork {
public static void main(String[] args) {
SAXReader saxreader=new SAXReader();
try {
Document document=saxreader.read(new File("src/mybean.xml"));
Element rootElement=document.getRootElement();
Iterator iter=rootElement.elementIterator();
while(iter.hasNext()){
Element element=(Element) iter.next();
String myClassName=element.attributeValue("class");
Class clazz=Class.forName(myClassName);
//这个方法写在接口里,实现类实现这个接口就一定能调用到这个方法
Method method=clazz.getMethod("sayHello", null);
Constructor contructor=clazz.getConstructor();
Object obj=contructor.newInstance();
method.invoke(obj, null);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这样只要新增实现类实现Ihello接口,重写其中的方法,并配置到mybean.xml,不用修改主方法就能自动调用到。
原文地址:https://www.cnblogs.com/xixiyunan/p/9955584.html