原則オブジェクトを作成するために、XMLや反射を解析Tomcatの

原則オブジェクトを作成するために、XMLや反射を解析Tomcatの

  1つの インポートにjava.lang.reflect.InvocationTargetException。
  2  インポートjava.lang.reflect.Methodオブジェクト。
  3  輸入はjava.util.List;
  4  
  5  インポートorg.dom4j.Document。
  6  インポートorg.dom4j.DocumentException。
  7  インポートorg.dom4j.Element。
  8  インポートorg.dom4j.io.SAXReader。
  9  
10  パブリック クラスServerReadXML1 {
 11  
12      公共 静的 ボイドメイン(文字列[]引数)
 13              DocumentException、ClassNotFoundExceptionが、ないInstantiationException、IllegalAccessExceptionが、スロー
 14             ないNoSuchMethodExceptionは、SecurityException、はIllegalArgumentException、にInvocationTargetException {
 15  
16          // 今サーブレット場合ブラウザパターンURLで入力
17。          文字列URLPATTERN = " /ファースト" ;
 18である 
。19          // URLPATTERN取得したクラス名
20である          文字クラス名= getClassByUrl(URLPATTERN );
 21である 
22がある         // 完全なクラス名に基づいて、クラスオブジェクト取得
23は          、クラス= clazz Class.forNameの(クラス名);
 24  
25          // オブジェクトclazzによって反射された指定されたオブジェクトの作成
26は          オブジェクトOBJ = clazz.newInstance();
 27 
28          // サービス方法プレゼント
29          メソッド、メソッドclazz.getDeclaredMethod =(" サービス" );
 30  
31である         // 取得権限
32          (method.setAccessible 真の);
 33は 
34であり、         //はサービスメソッド実行
35          Method.invoke(OBJ)を、
 36  
37 [      }
 38である 
39      プライベート 静的文字列getClassByUrl(文字列URLPATTERN)はDocumentException {スロー
 40  
41である         。// SAXReaderオブジェクトを作成1. 
42である          SAXReaderリーダー= 新しい新SAXReader();
 43がある 
さ44          // 2.ファイルの読み取り
45          文書ドキュメントreader.Read =(。ServerReadXML1 クラス。.getClassLoader()getResourceAsStream(" web.xmlファイルを" ));
 46は、 
47          // 3.ゲットルート
48          の要素= rootElement document.getRootElement();
 49          // するSystem.out.println(rootElement.getName());
 50  
51である         // ルートノードの下4.取得サブノード
52で          一覧<要素> servletList = rootElement.elements()。
 53は 
54である         。// 同じサーブレット名タグに記録されたコンテンツは、URLPATTERN 
55         ServletName =文字列「」56は 
57である         // タグサーブレットの記録されたコンテンツサーブレットクラス
 58          // servletClassNameサーブレットの含有量は、完全なクラス名であり、
59          文字servletClassName = 「」;
 60  
61である         // 子ノード5トラバース
62を         ため(要素servletElement:servletList){
 63は             // のSystem.out.println(servletElement.getName());
 64  
65              // ラベルは、サーブレットマッピング、実行コードであるか否かを判断する
66              IF" サーブレットマッピング" .equalsは( servletElement.getName())){
 67  
68                 // オブジェクトタグURLパターン取得
69                  要素URL = servletElement.element(URLパターン);
 70  
71である                 // タグの内容を決定し、値が同じであるURLPATTERN 
72                  IF (urlPattern.equals(url.getText() )){
 73は、 
74                      // 同じコンテンツURLPATTERNサーブレット名を記録するタグ
 75                      // もし同じ、その後記録servletName
 76                      // servelt名のコンテンツ取得サーブレットマッピング
77                      servletName = servletElement.element(サーブレット-name " ).getText();
 78  
79                  }
 80 
81              }
 82  
83          }
 84  
85          // 再び反復
86          のための(要素servletElement:servletList){
 87              // サーブレットラベルは、このコードが実行されたか否かを判断する
88              IF" サーブレット" .equals(servletElement.getName())){
 89  
90                  // servletNameを取得し、サーブレット名を横断含有量が同じであるトラバーサルに値判定
91                  のiF(servletName.equals(servletElement.element(サーブレット名).getText())) {
 92  
93                      // 同じ記録servletClassName場合
94                     servletClassName = servletElement.element(" サーブレットクラス" ).getText();
95  
96                  }
 97  
98              }
 99  
100          }
 101  
102          // 返回サーブレット的全类名servletClassName 
103          戻りservletClassName。
104      }
 105  
106 }

 

 

1.ゲットクラス4通りの反射

@Test
    public void test1() throws ClassNotFoundException {
        
        //1.类名.class
        Class clazz = String.class;
        System.out.println(clazz);
        
        //2.对象.getClass()
        Class clazz1 = "abc".getClass();
        System.out.println(clazz1);
        
        //3.Class.forName();
        Class clazz2 = Class.forName("java.lang.String");
        System.out.println(clazz2);
        
        //4.ClassLoader .loadClass("全类名")
        Class clazz3 = ReflectTest1.class.getClassLoader().loadClass("java.lang.String");
        System.out.println(clazz3);
        
        
    }

 

2.反射使用属性的常用方法

@Test
    public void test2() throws ClassNotFoundException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        
        //获取Class对象 可以获取其内部的属性
        Class clazz = Class.forName("com.atguigu.bean.User");
        
        User user = new User();
        
        //Field对象 代表中类的属性 getField只能获取公共属性
        Field field = clazz.getField("email");
        System.out.println(field);
        
        
         //此种方式破坏代码的封装性 不推荐使用
        Field field2 = clazz.getDeclaredField("id");
        System.out.println(field2);
        
        field2.setAccessible(true);
        field2.setInt(user, 1001);
        System.out.println(user);
        
        
    }

3.反射使用方法的常用方法

@Test
    public void test3() throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
        
        Class clazz = Class.forName("com.atguigu.bean.User");
        
        //通过反射创建对象
        Object obj = clazz.newInstance();
        
        //现在想要设置name值
        String fileName = "name";
        
        //创建一个方法名
        String methodName = "set" + fileName.substring(0, 1).toUpperCase() //N
        + fileName.substring(1).toLowerCase(); //ame
        
        //根据方法名 获取公共方法
        Method method = clazz.getMethod(methodName, String.class);
        
        //执行指定的方法
        method.invoke(obj, "yangjian");
        
        
        System.out.println(obj);
    }

 

おすすめ

転載: www.cnblogs.com/zmy-520131499/p/11319482.html