-
Notifications
You must be signed in to change notification settings - Fork 302
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[MVC 구현하기 - 1단계] 오잉(이하늘) 미션 제출합니다. #419
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요 오잉!! 오랜만이네요
step1 진행하느라 고생하셨습니다 😃
딱히 리뷰 남길 부분 없이 깔끔하게 짜주셨네요 👍
다음 단계는 또 얼마나 잘 짜오실지 기대가 됩니다..
고생하셨습니다! 다음 단계 진행해주세요!
@@ -19,11 +26,37 @@ public AnnotationHandlerMapping(final Object... basePackage) { | |||
this.handlerExecutions = new HashMap<>(); | |||
} | |||
|
|||
public void initialize() { | |||
public void initialize() | |||
throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
checked Exception을 시그니처에 명시해주셨군요!
다만 이렇게 checked Exception을 명시하는 경우에는 처리를 메소드를 호출하는 쪽에서 담당하게 될 것 같아요.
발생하는 예외들은 모두 Reflection 관련 checked Excpetion이고, 외부에서 catch 구문을 통해 따로 무언가 처리를 해주기가 어려울 것 같다는 생각이 들어요!
따라서 리플렉션을 사용하는 부분(예외가 발생할 수 있는 지점)에서 try-catch로 감싸주는 건 어떨까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
맞습니다..
저도 checked exception을 메소드 시그니처에 명시할지, 해당 부분에서 try-catch해버릴지 고민하다가
예외 구조를 어떻게 잡아야할지 모르겠어서 우선 메소드 시그니처에 두고 넘어갔는데요..!!
테오 말씀처럼 전부 Reflection관련 예외이기 때문에 해당 지점에서 처리를 해주는게 맞다는 생각이 들어요!
우선 try-catch로 감싸도록 수정했습니다. 감사합니다!
Set<Class<?>> controllers = reflections.getTypesAnnotatedWith(Controller.class); | ||
for (Class<?> controller : controllers) { | ||
Object instance = controller.getDeclaredConstructor().newInstance(); | ||
Method[] methods = controller.getDeclaredMethods(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
declared를 붙이는 것과 붙이지 않는 것은 어떤 차이가 있을까요?
추가로, declared를 붙임에도 어떤 메소드가 추출되는지 확인해보면 저희가 구현하지도 않은 $jacocoinit
메소드가 나옵니다.
이는 synthetic
과 관련된 개념인데, 한 번 아래 아티클 읽어보시면 좋을 것 같아요 😄
declared를 붙인다고 해서 반드시 저희가 직접 정의한 메소드만 나오지는 않는 것 같더라구요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
getXXX()
- 상속받은 클래스와 인터페이스를 포함하여 모든 public 요소를 가져온다.
- 예를들어, getMethods() 는 해당 클래스가 상속받은 그리고 구현한 인터페이스에 대한 모든 public 메소드를 가져온다.
getDeclaredXXX()
- 상속받은 클래스와 인터페이스를 제외하고 해당 클래스에 직접 정의된 내용만 가져온다.
- 또한 접근 제어자와 상관없이 요소에 접근할 수 있다.
- 예를 들어 getDeclaredMethods() 는 해당 클래스에만 직접 정의된 private, protected, public 메소드를 전부 가져온다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요 테오!
선릉은 어떤가요 잘 지내고 계신가요?😋
이번 MVC 구현 미션을 교수님과 함께하게 되어 굉장히 기쁩니다ㅎㅎㅎ 잘 부탁드려요!!
이번 단계에 구현한 기능은 다음과 같습니다.
@Controller
가 달려있는 모든 클래스를 읽어온다.@RequestMapping
이 달려있는 메소드를 대상으로 HandlerExecutions를 더해준다.