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