Hello

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

볼빵빵오춘기

활동하기