[Spring Boot] 2. Reflection_3.Ex03

김미숙's avatar
Mar 20, 2025
[Spring Boot] 2. Reflection_3.Ex03

Annotation / @RequestMapping

package ex03; //A회사 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) // 언제 작동할지 정함 runtime or source(comfile시) @Target(ElementType.METHOD) public @interface RequestMapping { String value(); }

Dispatcher

package ex03; import java.lang.reflect.Method; import java.lang.reflect.Parameter; public class Dispatcher { UserController con; public Dispatcher(UserController con) { this.con = con; } public void routing(String path) { // /login Method[] methods = con.getClass().getMethods(); for (Method method : methods) { RequestMapping rm = method.getAnnotation(RequestMapping.class); if (rm == null) continue; // 다음 for문으로 바로 넘어감 // /login?username=ssar // RequestMapping("/login") if (path.startsWith(rm.value())) { try { // 1. 파라미터 검사 Parameter[] parameters = method.getParameters(); if (parameters.length > 0 && parameters[0].getType().equals(String.class)) { String username = path.split("\\?")[1].split("=")[1]; method.invoke(con, username); } else { method.invoke(con); } } catch (Exception e) { throw new RuntimeException(e); } } } }

UserController

package ex03; public class UserController { // /login?username=ssar&password=1234 @RequestMapping("/login") public void login(String username) { System.out.println("login call: " + username); } @RequestMapping("/join") public void join() { System.out.println("join call"); } @RequestMapping("/logout") public void logout() { System.out.println("logout call"); } @RequestMapping("/userinfo") public void userinfo() { System.out.println("userinfo call"); } }

App

package ex03; public class App { public static void main(String[] args) { Dispatcher ds = new Dispatcher(new UserController()); // 파라미터가 있으면 넣고 없으면 안 넣고 ds.routing("/login?username=ssar"); } }
출력 결과
C:\workspace\tools\jdk-21\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2024.3.2.1\lib\idea_rt.jar=54732:C:\Program Files\JetBrains\IntelliJ IDEA 2024.3.2.1\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\workspace\spring_lec\ref\out\production\ref ex03.App login call: ssar Process finished with exit code 0
 
package ex03; public class App { public static void main(String[] args) { Dispatcher ds = new Dispatcher(new UserController()); // 파라미터가 있으면 넣고 없으면 안 넣고 ds.routing("/login?username=ssar"); ds.routing("/join"); } }
출력 결과
C:\workspace\tools\jdk-21\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2024.3.2.1\lib\idea_rt.jar=54748:C:\Program Files\JetBrains\IntelliJ IDEA 2024.3.2.1\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\workspace\spring_lec\ref\out\production\ref ex03.App login call: ssar join call Process finished with exit code 0
Share article

parangdajavous