지난번에 배운 프록시방식도 결국 문제는 controller, service, repository 이렇게 넘어갈때마다 프록시를 코드로 내가 생성해줘야한다. 이떄는 3번
사실 controller, service, repository 3개다 프록시 코드는 비슷한데 이를 묶을 수 있는 방법은 없을까.
@Test
void reflection0() {
Hello target = new Hello();
//공통 로직1 시작
log.info("start");
String result1 = target.callA(); //호출하는 메서드가 다름
log.info("result={}", result1);
//공통 로직1 종료
//공통 로직2 시작
log.info("start");
String result2 = target.callB(); //호출하는 메서드가 다름
log.info("result={}", result2);
//공통 로직2 종료
}
이런 코드 보면 모양이 정말 비슷하지만 함수 callA callB를 동적으로 바꾸기는 뭔가 힘들다 이때 이용할 수 있는 기술이 리플렉션
Class classHello = Class.forName("hello.proxy.jdkdynamic.ReflectionTest$Hello");
Hello target = new Hello()
//callA 메서드 정보
Method methodCallA = classHello.getMethod("callA");
Object result1 = methodCallA.invoke(target)
이런식으로 어떤위치의 어떤함수인지 냅다 적으면 그 실제 class 정보를 가져올 수 있고
내부의 함수명을 String으로 적으면서 함수를 꺼낼 수 있다.
내가 실행할 class의 인스턴스만 만들어서 그함수 실행시켜줘 하면 실행가능 이것으로 동적으로 함수도 실행가능하다.
다만 String으로 적는것에서 보면 컴파일에러로 함수명 잘못적은거는 확인이 불가능하기에 실제서비스에서는 조심해야한다.