From beb13babc92a40fa394d1a25b995006acd8ef16e Mon Sep 17 00:00:00 2001 From: haerong22 Date: Mon, 15 Nov 2021 23:49:03 +0900 Subject: [PATCH] spring core proxy : reflection --- .../proxy/jdkdynamic/ReflectionTest.java | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 spring-core/proxy/src/test/java/com/example/proxy/jdkdynamic/ReflectionTest.java diff --git a/spring-core/proxy/src/test/java/com/example/proxy/jdkdynamic/ReflectionTest.java b/spring-core/proxy/src/test/java/com/example/proxy/jdkdynamic/ReflectionTest.java new file mode 100644 index 00000000..c7ef5b9d --- /dev/null +++ b/spring-core/proxy/src/test/java/com/example/proxy/jdkdynamic/ReflectionTest.java @@ -0,0 +1,78 @@ +package com.example.proxy.jdkdynamic; + +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.Method; + +@Slf4j +public class ReflectionTest { + + @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 종료 + } + + @Test + void reflection1() throws Exception { + //클래스 정보 + Class classHello = Class.forName("com.example.proxy.jdkdynamic.ReflectionTest$Hello"); + + Hello target = new Hello(); + //callA 메서드 정보 + Method methodCallA = classHello.getMethod("callA"); + Object result1 = methodCallA.invoke(target); + log.info("result1={}", result1); + + //callB 메서드 정보 + Method methodCallB = classHello.getMethod("callB"); + Object result2 = methodCallB.invoke(target); + log.info("result2={}", result2); + } + + @Test + void reflection2() throws Exception { + //클래스 정보 + Class classHello = Class.forName("com.example.proxy.jdkdynamic.ReflectionTest$Hello"); + + Hello target = new Hello(); + //callA 메서드 정보 + Method methodCallA = classHello.getMethod("callA"); + dynamicCall(methodCallA, target); + + //callB 메서드 정보 + Method methodCallB = classHello.getMethod("callB"); + dynamicCall(methodCallB, target); + } + + private void dynamicCall(Method method, Object target) throws Exception { + log.info("start"); + Object result = method.invoke(target); + log.info("result={}", result); + } + + @Slf4j + static class Hello { + public String callA() { + log.info("callA"); + return "A"; + } + + public String callB() { + log.info("callB"); + return "B"; + } + } +}