-
Notifications
You must be signed in to change notification settings - Fork 45
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
[DI - Step 1] 효오 미션 제출합니다. #11
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.
안녕하세요!
요구사항 잘 구현해주셔서 바로 머지하겠습니다 👍
피드백 몇가지도 남겨두었습니다 :) 확인 부탁드려요.
} | ||
return createInstance(injectedConstructor); | ||
} catch (Exception e) { | ||
logger.error("### Bean create fail : {}", e.getMessage()); |
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.
예외를 추적하기 위한 정보가 e.getMessage()
면 충분할까요? 계획한 수준의 예외가 아니라면 Exception 상태를 보존해주면 좋을 것 같아요.
https://rules.sonarsource.com/java/tag/error-handling/RSPEC-1166
https://www.slipp.net/questions/350
putBean(parameterType); | ||
parameters.add(getBean(parameterType)); |
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.
putBean, getBean 의 흐름이 어색해보이네요. putBean 메서드 자체의 의미는 충분히 있고 getBean 메서드에도 자체의 의미가 분명 있습니다. 그러나 createInstance 에서는 최적화되어 있기보다는 방어 로직으로 putBean을 사용하여 불필요할 수도 있는 행위를 수행하는 코드이지는 않을까요? 메서드의 행위에 대한 최적화가 더 의미있지 않을까 생각해봅니다 :)
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.
getBean 메소드에서 존재하지 않는 클래스 타입인 경우 만들어서 가져오도록 로직을 추가했습니다!
private final UserService userService; | ||
private UserDao userDao; |
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.
final은 어떤 기준으로 작성 되었나요?
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.
빼먹은 부분이 있었습니다! 감사합니다.
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.
안녕하세요!
요구사항 구현이 잘 되긴 하였으나 기능상의 결점이 보여 피드백을 남겼습니다 :)
확인 부탁드려요!
|
||
private void putBean(Class<?> preInstanticateBean) { | ||
if (!beans.containsKey(preInstanticateBean)) { | ||
beans.put(preInstanticateBean, createBean(preInstanticateBean)); |
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.
(장황하게 작성하여 코멘트를 수정합니다!)
의도한 Bean 의 유형과 범위에서만 생성되고 있나요?
유형 : Controller, Service, Repository Annotation 이 작성된 class
범위 : package
이에 대한 테스트케이스도 작성이 되면 좋겠어요.
처음에 안보였던 케이스가 나중에 보여 상태를 변경하였습니다 :) |
- BeanFactory와 BeanScanner의 생명주기를 같이 가져가기 위해 BeanFactory 내부에서 BeanScanner 생성
- getBean 실패하는 테스트 추가
- getControllersFail 실패 테스트 추가 - getBean 성공 테스트 추가
안녕하세요!
|
말씀드린 의도가 잘못 전달된 것 같네요 :)
A class 의 객체는 생성되면 안됩니다 :) |
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.
의도가 잘못 전달된 듯 하여 코멘트를 조금 더 상세하게 남겼습니다!
확인 부탁드려요 :)
} | ||
|
||
if (!preInstanticateBeans.contains(requiredType)) { | ||
throw new IllegalArgumentException("해당 클래스를 찾을 수 없습니다."); |
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.
조금 더 상세한 로그를 남겨주는 것이 추적하기 쉬울 것 같아요 :)
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.
내용 확인하여 머지합니다!
구현 잘 해주셔서 감사합니다 :) 👍
안녕하세요! 효오라고 합니다.
미션을 진행하면서 궁금한게 있습니다.
BeanScanner와 BeanFactory를 생성하는 위치에 대해 많이 고민했었습니다.
현재는 DispatcherServlet을 생성해주는 SlippWebApplicationInitializer에 스캐너와 팩터리를 생성해주고 있는데 위치가 적절한지 궁금합니다!
많은 지적 부탁드립니다!