73. @Autowired의 원리
by 볼빵빵오춘기DI가 어떻게 일어나냐면 기본적으로 클래스를 만들면 생성자가 기본적으로 있다.
근데 그 스프링이 컴포넌트스캔할때 @Service (Service라는 어노테이션을 읽고 나서) "어? BoardService 내가 스프링컨텍스트에 저장해야하는 object구나 ? 저장할 때 new를 해서 들구 가야겠네" 생각하고, 이때 기본생성자를 해서 들구간다.
기본생성자로해서 들고갈때 만약에 파라미터가 아래와 같이 생긴 생성자가 생겨버리면 new할때 기본생성자가 없는것이다.
그러므로 BoardService가 어디에서 생길 때 기본생성자가 생겨야하는데 만약 위와같이 작성하였다면
"어? 기본생성자가 없네. 어 그럴려면 파라미터에 있는것들을 주입시켜줘야돼" 해서
컴포넌트스캔해서 뒤져보니 Repository가 스캔에 떠있다.
즉, 무슨 말이냐 하면 repository라는 패키지가 있는데 그 패키지에 뭐가 있냐면 userRepository, BoaradRepository, ReplyRepository가 있다.
그럼 repository 패키지는 스프링이 시작할 때 컴포넌트 스캔을 할 때 스프링IOC 컨터이너에 Bean들을 등록한다.
Bean= object 즉 객체란 말이다.
그럼 컨테이너 IoC에 UserRepositoy, BoardRepository, ReplyRepository가 Bean으로 등록 된다.
new 하면 생성자를 호출해서 new를 한다.
기본생성자가 사라지면 그럼 new를 할 때 매개변수를 넣어야지만 new가 된다.
그럼 repository를 스캔해서 등록하고 난 후 Service 패키지를 스캔하게 된다.
그러면 BoardService를 스캔하게된다. BoardService 얘를 스캔하게 되니깐 컨테이너IoC에 등록해야하는데 등록할려고 봤더니 기본 생성자가 없고 매개변수가 있는 생성자밖에 없기때문에 매개변수를 받아야한다.
그러므로 @Autowired를 사용하지 않고 쓴다한다면 아래와 같이 코드가 된다.
이게 DI이다.
즉, @Autowired를 붙임으로써 저 작동하게 된다.
'강의 따라하기 > blog' 카테고리의 다른 글
75. 댓글 삭제 (0) | 2024.01.14 |
---|---|
72. 댓글 작성시 네이티브 쿼리 사용해보기 (0) | 2024.01.11 |
71. 댓글 작성시 Dto 사용해보기 (1) | 2024.01.11 |
70. 댓글 작성하기 (0) | 2024.01.10 |
69. 댓글 목록 뿌리기 (1) | 2024.01.10 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기