框架學習之路一
學習工作當中用到了那麼多的框架,難免會想搞清楚這些框架的底層到底是怎樣實現的,藉此機會從簡單的寫起,嘗試著去實現一個框架
一,通過解析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,不用修改主方法就能自動呼叫到。