강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của moonshin1232946
moonshin1232946

câu hỏi đã được viết

Tạo máy chủ đầu tiên của bạn bằng Java và Spring Boot Bất kỳ ai cũng có thể dễ dàng chuyển từ giai đoạn phát triển sang triển khai! [Gói phát triển máy chủ tất cả trong một]

Bài 18. Chia Controller thành 3 phần - Service và Repository

어노테이션에 대해서

Viết

·

489

3

 안녕하세요 강의 잘 듣고 있습니다!!

강의를 듣다가 궁금해서 질문 남깁니다.

Controller와 Service 연결할때와 Service와 Repository를 연결할때 사용하는 @Autowired는 사용하지 않아도 자동으로 연결이 되는건가요??

Service클래스와 Repository클래스 위에 @Service, @Repository 어노테이션을 사용할떄도 있고 이번 강의처럼 사용하지 않을떄도 있는데 아직까지 차이점을 모르겠습니다.

springawsspring-bootmysqljpaJPAjava

Câu trả lời 2

4

@Controller, @Service, @Repository 모두 코드를 들여다 보면 @Component 애노테이션이 붙어있을 겁니다. @Component 애노테이션은 컴포넌트 스캔의 대상이 되어 '스프링 빈'으로 등록이 되어 '스프링 컨테이너'가 관리하게 됩니다. 그래서 @Service, @Repository 애노테이션을 사용했을 때와 사용하지 않았을 때의 차이는 스프링 빈으로 등록 및 관리가 되냐 안 되냐의 차이가 있습니다.

또한 @Autowired는 이름에서 알 수 있듯이, 자동으로 연결해 주는 것입니다. (자동 의존관계 주입) 만약 생성자를 통해 주입을 받는 경우, 생성자가 하나라면 @Autowired는 생략이 가능합니다. (스프링 빈으로 등록되었을 때에 해당됩니다^^)

lannstark님의 프로필 이미지
lannstark
Người chia sẻ kiến thức

완벽한 설명이십니다~~~ 감사합니다! 찬우님!! 😊 🙇

1

lannstark님의 프로필 이미지
lannstark
Người chia sẻ kiến thức

안녕하세요 JaeHongMin님!! 좋은 질문 감사드립니다!! 😊

찬우님께서 정말 잘 설명해주신 것처럼, 똑같은 Service 클래스 / 똑같은 Repository 클래스이지만,

@Service 혹은 @Repository 어노테이션을 사용하게 되면 '스프링 빈'이 되고

저희가 직접 new Service() 라는 생성자를 불러주면, '스프링 빈'이 아닌 것이에요!!!!!

 

@Autowired 라는 어노테이션 자체는 '스프링 빈'에만 적용할 수 있고 18강은 저희가 직접 생성자를 호출하였기 때문에 (즉 스프링 빈이 아니기 때문에) @Autowired 를 사용하지 않은 것입니다!

 

지금 듣고 계신 18강을 넘어, 19강부터 21강까지 들어보시면 (특히 19강에서 new Repository()@Repository 의 차이점을 코드로 보실 수 있습니다!) 조금 더 감이 오실겁니다!!

 

혹시나 <Section 3. 역하릐 분리와 스프링 컨테이너>를 모두 들으셨는데도 아직 차이점 잘 정리되지 않으신다면, 한 번더 편하게 질문 올려주세요!!!

감사합니다!!! 🙏

Hình ảnh hồ sơ của moonshin1232946
moonshin1232946

câu hỏi đã được viết

Đặt câu hỏi