작성
·
401
답변 2
4
@Controller
, @Service
, @Repository
모두 코드를 들여다 보면 @Component
애노테이션이 붙어있을 겁니다. @Component
애노테이션은 컴포넌트 스캔의 대상이 되어 '스프링 빈'으로 등록이 되어 '스프링 컨테이너'가 관리하게 됩니다. 그래서 @Service
, @Repository
애노테이션을 사용했을 때와 사용하지 않았을 때의 차이는 스프링 빈으로 등록 및 관리가 되냐 안 되냐의 차이가 있습니다.
또한 @Autowired
는 이름에서 알 수 있듯이, 자동으로 연결해 주는 것입니다. (자동 의존관계 주입) 만약 생성자를 통해 주입을 받는 경우, 생성자가 하나라면 @Autowired
는 생략이 가능합니다. (스프링 빈으로 등록되었을 때에 해당됩니다^^)
1
안녕하세요 JaeHongMin님!! 좋은 질문 감사드립니다!! 😊
찬우님께서 정말 잘 설명해주신 것처럼, 똑같은 Service 클래스 / 똑같은 Repository 클래스이지만,
@Service
혹은 @Repository
어노테이션을 사용하게 되면 '스프링 빈'이 되고
저희가 직접 new Service()
라는 생성자를 불러주면, '스프링 빈'이 아닌 것이에요!!!!!
@Autowired
라는 어노테이션 자체는 '스프링 빈'에만 적용할 수 있고 18강은 저희가 직접 생성자를 호출하였기 때문에 (즉 스프링 빈이 아니기 때문에) @Autowired
를 사용하지 않은 것입니다!
지금 듣고 계신 18강을 넘어, 19강부터 21강까지 들어보시면 (특히 19강에서 new Repository()
와 @Repository
의 차이점을 코드로 보실 수 있습니다!) 조금 더 감이 오실겁니다!!
혹시나 <Section 3. 역하릐 분리와 스프링 컨테이너>를 모두 들으셨는데도 아직 차이점 잘 정리되지 않으신다면, 한 번더 편하게 질문 올려주세요!!!
감사합니다!!! 🙏
완벽한 설명이십니다~~~ 감사합니다! 찬우님!! 😊 🙇