1. 程式人生 > >框架學習之路一

框架學習之路一

學習工作當中用到了那麼多的框架,難免會想搞清楚這些框架的底層到底是怎樣實現的,藉此機會從簡單的寫起,嘗試著去實現一個框架

 

一,通過解析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,不用修改主方法就能自動呼叫到。