[Spring] 스프링 빈, 의존성(DI) 주입

[Spring] 스프링 빈, 의존성(DI) 주입

의존관계

Controller에서 Service를 통해 비즈니스 로직을 처리하고, Repository를 통해 데이터를 저장한다고 할 때, 서로 의존관계가 있다고 표현한다 ("Controller 가 Service를 의존한다"). Contoller 객체를 생성할 때 Service 객체도 필요하게 되는데, 이 때마다 필요한 service들을 new로 여러번 생성하는 것은 비효율적.

-> 스프링에서는 각 객체들을 컨테이너에 스프링 빈으로 등록하여 관리할 수 있음.

빈이란?

스프링 컨테이너가 관리하는 자바 객체이다.

Spring 시작 시 스프링 컨테이너에 스프링 빈들이 등록되어서 이후 new 로 객체를 생성하지 않고도 사용할 수 있다.

스프링 빈 등록 방법

컴포넌트 스캔 ( @Component )

어노테이션 @Component 을 통해 스프링 빈으로 자동 등록한다. @Service @Repository 로 서비스, 리포지토리를 등록할 수도 있다. 자바 코드로 직접 스프링 빈 등록

@Configuration 클래스에 등록할 스프링 빈( @Bean )을 설정한다.

컴포넌트 스캔으로 스프링 빈을 등록하는 방식이 훨씩 간단하지만, 경우에 따라 자바 코드로 직접 등록해야할 때가 있다.

ex. 데이터 저장소를 변경하려고 할 때, Repository를 다른 db repository로 바꿔야한다. 컴포넌트 스캔대신 설정 파일에 스프링 빈을 등록했다면, 새로 만든 리포지터리로 바꾸기만 하면 데이터 저장소가 변경될 수 있다.

의존성 주입

@Autowired 어노테이션을 통해 등록된 빈을 불러와 의존성을 주입할 수 있음.

from http://whatsmyinterest.tistory.com/42 by ccl(A) rewrite - 2021-12-07 16:01:31