springboot - blog project (71)

Yuri Lee·2020년 9월 8일
0

springboot - blog project

목록 보기
46/49

스프링부트 강좌 71강(블로그 프로젝트) - @Autowired의 원리

@Autowired 는 DI이다. 디펜젼시 인젝션.

원래 인젝션이 어떻게 일어날까? 기본적으로 생성자가 있다.

스프링이 컴포넌트를 스캔할 때 서비스 어노테이션을 읽고 나서 어? 이 BoardService 스프링 컨텍스트에 저장해야 하는 오브젝트구나~ 그래서 얘를 저장하려고 할때 new를 해서 들고 갈 것이다.
그때 기본 생성자를 호출해서 들고 간다. 근데 이때 여기에 파라미터가

자바에서 기본은?
기본 생성자는 내가 어떤 생성자를 만드는 즉시 사라진다는 것이다.
기본 생성자가 없으니까 ..

주입을 시켜줘야 하는데 내가 스프링 컨텍스트를 뒤져보니까 레파지토리가 떠있는 것이다.

repository라는 패키지가 있는데 여기에

UserRepository
BoardRepository
ReplyRepository

스프링이 시작될 때 컴포넌트 스캔을 한다. 이 스캔을 해서 스프링 Ioc 컨테이너에게 빈들을 등록한다.
빈은 오브젝트 객체라는 것이다.

등록할때 UserRepository, BoardRepository, ReplyRepository가 등록된다. 어떻게? new 하면서, 근데 이 new는 생성자를 호출하면서 된다.

	public BoardService(BoardRepository bRepo, ReplyRepository rRepo) {
		
	}

이렇게 되면 new를 할때 bRepo,rRepo 얘를 집어 넣어야지만 완성된다. BoardService를 new 하고 싶은데 ...


이제 repository를 스캔해서 등록하고 나서 그 다음에 service 패키지를 스캔한다. 이것을 스캔할때 BoardService를 스캔한다.
얘를 스캔하게 되니까 얘도 빈 등록을 해야 한다.
new를 하려고 보니 기본 생성자가 없고 저 타입 두개를 받아야 한다. 근데 이 타입을 어떻게 주입해야 할까?

두둥..! BoardRepository, ReplyRepository는 내가 주입시켜줄 수 있네?~~~ 왜지? 이미 내가 들고 있으니까...

@Autowired
private BoardRepository boardRepository;
	
@Autowired
private ReplyRepository replyRepository;
	
@Service
public class BoardService {
	
	private BoardRepository boardRepository;
	private ReplyRepository replyRepository;
	
	public BoardService(BoardRepository bRepo, ReplyRepository rRepo) {
		this.boardRepository = bRepo;
		this.replyRepository = rRepo;
	}
	

@RequiredArgsConstructor 를 붙이면 초기화 되지 않는 얘들을 생성자를 만들 때 초기화를 시켜준다.

간단하게 하려면 @Autowired 를 걸지 않아도 된다.

1번

@Service

public class BoardService {
	
	private BoardRepository boardRepository;
	private ReplyRepository replyRepository;
	
	public BoardService(BoardRepository bRepo, ReplyRepository rRepo) {
		this.boardRepository = bRepo;
		this.replyRepository = rRepo;
	}

2번


@Service
@RequiredArgsConstructor
public class BoardService {
	
	private final BoardRepository boardRepository;
	private final ReplyRepository replyRepository;

1번과 2번은 똑같은 것임

-이 글은 유투버 겟인데어의 스프링 부트 강좌를 바탕으로 정리한 내용입니다.-

profile
Step by step goes a long way ✨

0개의 댓글