반사

2013-04-12 4 views
2

을 통해 자바에서 주석을 얻는 방법이 내 주석이다.반사

자바에서 리플렉션을 사용하여이를 수행하는 방법.

이 문제를 해결하는 데 도움을주십시오.

편집 :

@PreAuthorize("isAuthenticated() and hasPermission(#request, 'CREATE_REQUISITION')") 
    @RequestMapping(method = RequestMethod.POST, value = "/trade/createrequisition") 
    public @ResponseBody 
    void createRequisition(@RequestBody CreateRequisitionRO[] request, 
      @RequestHeader("validateOnly") boolean validateOnly) { 
.... 
} 

이 내가 @RequestiMapping 가려고 방법은 다음과 같습니다 :

이 내 실제 방법입니다 무엇

package com.hexgen.reflection; 

import java.lang.reflect.Method; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import com.hexgen.api.facade.HexgenWebAPI; 

public class WebAPITest { 
    public static void main(String[] args) { 
     try { 
      Class<HexgenWebAPI> clazz = HexgenWebAPI.class; 
      Method methodAnnotaion = clazz.getMethod("createRequisition"); 
      RequestMapping methodRequestMappingAnnotation = methodAnnotaion.getAnnotation(RequestMapping.class); 
      RequestMethod[] methods = methodRequestMappingAnnotation.method(); 
      String[] mappingValues = methodRequestMappingAnnotation.value(); 

      for(RequestMethod req : methods){ 
       System.out.println("RequestMethod : " + req); 
      } 

      for (String string : mappingValues) { 
       System.out.println("mappingValues : " + string); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
} 

을하지만 난이 예외가 :

java.lang.NoSuchMethodException: com.hexgen.api.facade.HexgenWebAPI.createRequisition() 
    at java.lang.Class.getMethod(Class.java:1605) 
    at com.hexgen.reflection.WebAPITest.main(WebAPITest.java:12) 
+0

[자바 : 리플렉션을 통해 특수 효과에 액세스] (0120-998-383) –

+0

데니스, 질문을하기 전에 먼저 위의 방법을 시도해 보았습니다. 여기서 나는 오직 여기에서 물었다. :) –

+0

당신이 시도한 것을 포함 시켰고 곧바로 어떤 오류가 발생했으면 가장 좋았을 것입니다. –

답변

2

는 모두 아래 사용을 참조하십시오

Class<YourClass> clazz = YourClass.class; 
RequestMapping clazzRequestMappingAnnotation = clazz.getAnnotation(RequestMapping.class); 
RequestMethod[] methods = clazzRequestMappingAnnotation.method(); 
String[] mappingValues = clazzRequestMappingAnnotation.value(); 

방법 methodName위한 클래스 YourClass에서 :

클래스 YourClass를 들어

+0

제 EDIT를보세요? 그래도 문제를 해결할 수 없습니다. –

+0

예 해결 방법을 작성하는 동안 인수를 전달하는 것을 잊어 버렸습니다. –

+0

아, 그래 ... – acdcjunior

1

이 주석 클래스에있는 경우 (예 : Test를) 다음

당신이 RequestMapping 주석을 얻으려고 노력하고 있으며,이 클래스 또는 메소드에 배치 할 수있는 것처럼
RequestMapping a = Test.class.getAnnotation(RequestMapping.class); 
RequestMethod m = a.getMethod();