欢迎光临
我们一直在努力

一个用XML配置的动态加载办法,比上一个全面,希望还能进精华区-JSP教程,Java与XML

建站超值云服务器,限时71元/月

首先设计一个简单的xml配置文件config.xml
<?xml version=1.0 encoding=utf-8?>
<test>
<luck title="luck bang bang bang" tag="luck" application="dispatch.test" method="mm">
</luck>
</test>
接下来一个分析xml的方法,用到jaxp,dispatch.java
package dispatch;

import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.defaulthandler;
import javax.xml.parsers.saxparserfactory;
import javax.xml.parsers.parserconfigurationexception;
import javax.xml.parsers.saxparser;

public class dispatch extends defaulthandler
{
        //public dispatch(){
        public void execute(){
        defaulthandler handler = new dispatch();
        saxparserfactory factory = saxparserfactory.newinstance();
        try {
            saxparser saxparser = factory.newsaxparser();
            saxparser.parse( new file("dispatch/config.xml"),handler);

        } catch (throwable t) {
            t.printstacktrace();
        }
        
    }
    dynamicloader loader = new dynamicloader();
    //===========================================================
    // sax documenthandler methods
    //===========================================================

    public void startelement(string namespaceuri,
                             string lname, // local name
                             string qname, // qualified name
                             attributes attrs)
    throws saxexception
    {
        //debug//
        string ftag = "luck";
        ////////
        string ename = lname; // element name
        if ("".equals(ename)) ename = qname; // namespaceaware = false
        if (attrs != null) {
            for (int i = 0; i < attrs.getlength(); i++) {
                if(ftag.equals(attrs.getvalue(i))){
                system.out.println(loader.loader(attrs.getvalue(i+1),attrs.getvalue(i+2),"see it ??"));
                break;
                }//if equals
            }//for i
        }//if !null
    }
    public static void main(string argv[]){
        dispatch get = new dispatch();
        get.execute();
        }
}
再来一个动态的加载方法dynamicloader.java
package dispatch;
import java.lang.*;
import java.lang.reflect.*;

public class dynamicloader{
    public dynamicloader(){
    }

public string loader(string appname,string mthname,string ctn){
    string restr = "";
    class torun = null;
    
    try{
    torun = class.forname(appname);
    method ftogo = torun.getdeclaredmethod(mthname,new class[]{string.class});
    restr = ftogo.invoke(torun.newinstance(),new object[]{ctn}).tostring();
    }catch(exception e){
    system.out.println("loader:"+e+"|"+mthname+"|"+appname+"|"+ctn);
    }
    return restr;
}
}
一个小小的调试脚本,只是用来返回参数test.java
package dispatch;
public class test{
public string mm(string str){
        return str;
    }
}
xml文件的分析需要系统加jaxp、jaxr、jaxm、jaxrpc,具体的去看sax的文档我这里就不赘述了。
这个联起来可以跑了,只是速度太慢,跟同事用同样原理的.propertier文件方式比好象慢一些,郁闷~

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 一个用XML配置的动态加载办法,比上一个全面,希望还能进精华区-JSP教程,Java与XML
分享到: 更多 (0)