의존 관계 설정을 위한 어노테이션에 대한 고찰
project를 진행하면서 @Autowired와 @Resource, @Inject에 대해 알아보았다.
근데 아무리 생각해도 궁금증이 남아 머리에서 재생되며 튀어나오길래 이야기를 나눠봤다.
주제
@Autowired와 @Resource의 장단점과 왜 spring에서는 @Inject를 대신하는 @Autowired는 제공하는데
@Resource를 대신하는 어노테이션은 없는 것인가?
뭔가 장단점은 모르겠으나 정리해보자면
"@Resource가 @Autowired보다 먼저 나왔다는 것이고 @Resource가 좀 더 무결하다는 느낌이 든다."
"@Autowired spring bean에서 같은 type이 있으면 알아서 주입해주지만 동일 type이 두 개가 있으면
Qualifier로 지정해야 주입이 된다."
는 두 가지의 이야기가 나왔다.
잘 모르겠던 나는 다시 질문을 던졌고, 이번에는 어느 정도 원하는 이야기에 가까운 답을 들을 수 있었다.
"Autowired는 spring bean을 저장하는 녀석한테서 bean 목록 중 Autowired에 binding 할 수 있는 객체가 있으면
해주는 것이고, Resource는 그런 것 없이 name으로 지칭하니 그런 것 아닌가?
그리고 java spec는 글로벌 해야 하는데 spring 기반 기술을 사용할 수 없기 때문인 것 같다."
라는 내용이었다.
이렇게 이야기를 듣고 학원 동기와 토론 후 정리해보니
대충 느낌적인 느낌으로
@Resource는 name으로 의존성을 보존하니 굳이 spring에서 추가적인 어노테이션을 생성하지 않아도 괜찮지만
의존성을 좀 더 쉽게 관리하기 위해 @Autowired를 만들어 제공하는게 아닌가 싶었다.
물론 뇌피셜이 끼어있기 때문에 맞는지는 모르겠지만 일단 깊게 파면 끝이 없으니 여기까지 하는걸로~