BASHA TECH
this.getclass().getmethod 본문
클래스("getClass"로 가져온 "Class<?>")의 "getMethod"메서드는 메서드 명과 파라미터 타입 배열(Class<?>[] parameterTypes)로 구성된 메서드를 클래스에서 찾아서 메서드 객체(java.lang.reflect.Method)를 넘겨줍니다.
getMethod(String name, Class<?>... parameterTypes) or getMethod(String name)
"name"은 메서드 명입니다. "parameterTypes"는 클래스(java.lang.Class)로된 구성된 배열입니다. 파라미터가 없으면 입력하지 않습니다. 클래스에 ".class"를 사용하면 클래스의 패키지명과 클래스 명으로 구성된 클래스(Class<>)를 가져옵니다.
https://carrotweb.tistory.com/56
이건 자바 클래스 동적 로딩에 대한 추가 설명
https://carrotweb.tistory.com/53
getmethod에 대해 자료를 찾아보던 중 이런 것이 나옴. . .
cf. 참고:
reflection을 이용해서 method를 호출하기 = > 이게 뭐지. . . ? ask!
reflection이란, 리플렉션은 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API.
실제로 자바는 정적인 언어라 구체적인 클래스 타입을 알지 못하면 호출하여 실행하기 어려운 부분이 많은데, 이러한 동적인 문제를 해결해주기 위한 것이 Reflection.
주로, 프레임워크나 IDE 나 Library 에서 정의되어있는 메서드나 클래스의 종료를 가져오거나, 호출하기 위해서 사용된다.
대표적인 사용 예로는 스프링의 DI (dependency Injection) 이나 Proxy, IDE 에서 정의된 메서드를 가져오거나 할 때 사용됨.
1. Object instance = FirstService firstService;
2. Class<?> firstClass = instance.getClass();
3. Method method = firstClass.getDeclaredMethod(methodName, firstDto.getClass());
4. Object result = method.invoke(instance, parameter);
// 1. Object instance = FirstService firstService;
실제 호출하고자 하는 instance 를 가져옵니다.
// 2. Class<?> firstClass = instance.getClass();
instance 의 Class 를 getClass() 메서드를 통해 추출합니다.
// 3. Method method = firstClass.getDeclaredMethod(methodName, firstDto.getClass());
getDeclaredMethod 를 이용하여 firstClass 의 선언되어있는 methodName 과 firstDto Class 의 parameter 를 가진 method 를 가져옵니다.
reflection 을 이용하여 method 를 가져오는 방법은 2가지가 있습니다. getMethod() 와 getDeclaredMethod() 가 있습니다.
이 2가지의 차이점은
getMethod() 는 public method 뿐만아니라 base class 의 상속되어있는 superclasses 와 superinterface 의 메서드 전부를 가져오고,
getDeclaredMethod() 는 해당 클래스에만 선언된 method 를 가져옵니다.
따라서, 필요에 따라 구분해서 사용해야 합니다.
// 4. Object result = method.invoke(instance, parameter);
추출한 method 의 invoke() 를 사용하여 실행시킵니다. Object 를 return 하기 때문에 return 타입에 맞춰 형변환하여 사용하면 됩니다.
https://sanghye.tistory.com/31
'Computer > JSP' 카테고리의 다른 글
프록시 패턴(Proxy Pattern) (0) | 2022.09.07 |
---|---|
AOP & Filter & Listener (0) | 2022.09.05 |
Redirect (0) | 2022.09.01 |
startsWith/endsWith 특정 문자로 시작하거나 끝나는지 체크 (0) | 2022.09.01 |
annotation이 java코드로 바뀌는 원리 (0) | 2022.09.01 |