我们每天都在用别人的框架感觉很牛逼,一大堆配置之后竟然就可以运行程序了。是不是觉得很牛逼?其实不是很复杂,只要理解框架做了什么事情,一切都变得非常容易。
首先,框架一般都需要你配置一个xml文件
然后获得全限定类名,或者属性,或者文本等需要的数据。xml不用多说,扩展性标签语言,曾经想取代html(超文本标签语言)
可是没能成功,最后又想作为存储数据而存在互联网中,谁知市场上的数据库已经是非常成熟了。最终只能作为配置文件进场了。不过有时候也可以拿xml传递数据,不过json更加适用,速度快,简单化,所以我们谈到xnl只要想到是作为框架的配置文件就好了。
package com.cszy.test; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.util.HashMap; import java.util.Map; /** **获取xml配置文件关键熟悉保存到map集合中 **/ public class DomUtils { public static Map<String,Object> getMap() throws Exception{ Map<String,Object> map = new HashMap<String,Object>(); Document document = new SAXReader().read(DomUtils.class.getClassLoader().getResourceAsStream("web.xml")); Element elementClass = (Element) document.selectSingleNode("/Web-App/Servlet/Servlet-Class"); Element elementUrl = (Element) document.selectSingleNode("/Web-App/Servlet-Mapping/Url-Parttrn"); String classPath = elementClass.getText(); String elementUrlPath = elementUrl.getText(); map.put(elementUrlPath,classPath); return map; } }
package com.cszy.test; import java.util.Map; /**返回需要的数据**/ public class TestDemo { public String test() throws Exception{ Map<String,Object> map = DomUtils.getMap(); String classUrl = (String) map.get("/test"); return classUrl; } }
package com.cszy.test; /**被测试的方法**/ public class TestDom { private void test(int i , int j){ System.out.println("测试起来了:1+1="+(i+j)); } }
package com.cszy.test; import java.lang.reflect.Method; /**测试主方法,主要使用大量当时来动态调用方法**/ public class MainTest { public static void main(String[] args) throws Exception{ Class<TestDemo> clazz = TestDemo.class; //得到class类对象 TestDemo mainTest = clazz.newInstance(); //创建实例 Method method = clazz.getDeclaredMethod("test"); String url = (String) method.invoke(mainTest); Class<?> clazz2 = Class.forName(url); Method method2 = clazz2.getDeclaredMethod("test",int.class,int.class);//加载方法 method2.setAccessible(true);//暴力反射 method2.invoke(clazz2.newInstance(),1,1);//调用方法赋值 } }