on
[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