본문 바로가기
Java/[스프링 5 프로그래밍 입문]

[Spring] 의존 자동 주입(1) - @Autowired 애노테이션

2021. 7. 30.

이전 포스트에서는 설정 클래스에서 생성자 또는 setter 메서드를 통한 의존 주입 방법을 알아보았다. 이번에는 스프링 프레임워크에서 @Autowired 애노테이션을 이용하여 의존 객체를 자동으로 주입하는 방법에 대해 자세히 알아보자.


스프링의 @Autowired Annotation을 이용한 빈 객체 의존 자동 주입

의존 대상을 설정 코드에서 직접 주입하지 않고 스프링이 자동적으로 의존하는 빈 객체를 주입하는 것자동 주입이라고 한다. 스프링에서 의존 자동 주입을 설정하기 위해서는 @Autowired 애노테이션을 사용한다. 다른 애노테이션을 사용하는 방법도 있지만 여기서는 @Autowired에 대해서만 알아보겠다.

 

자동 주입 기능을 이용하면 설정에 의존 객체를 명시하지 않아도 스프링이 알아서 필요한 의존 빈 객체를 찾아서 주입한다. 자동 주입 기능을 이용하기 위해서는 의존을 주입할 대상 필드 또는 메서드에 @Autowired 애노테이션을 붙이기만 하면 된다.

 

@Autowired 애노테이션 사용법 - 필드

public class ExService{

	@Autowired
	private ExDao exDao;
	
}
@Configuration
public class AppCtx {

	@Bean
	public ExDao exDao(){
		return new ExDao();
	}
	
	@Bean
	public SampleDao sampleDao(){
		return new SampleDao();
	}
	
	@Bean
	public ExService exService(){
		// ExService 클래스 내에서 자동 주입을 이용했기 때문에 직접 의존 주입을 하지 않아도 됨 
		return new ExService();
	}
}

위 코드에서처럼 자동 주입 애노테이션을 붙이면 설정 클래스에서 직접 의존을 주입하지 않아도 스프링이 해당 타입의 빈 객체를 찾아서 주입해준다. exDao 필드에는 ExDao 타입의 빈 객체를 찾아서 주입해준다.

 

@Autowired 애노테이션 사용법 - 메서드

자동 주입을 위한 @Autowired 애노테이션은 메서드에도 붙일 수 있다. 아래의 코드는 ExService 클래스의 setter 메서드에 자동 주입을 설정한 예제이다.

 

public class SampleService {

	private ExDao exDao;
	private SampleDao sampleDao;
	
	@Autowired
	public void setExDao(ExDao exDao) {
		this.exDao = exDao;
	}
	
	@Autowired
	public void setSampleDao(SampleDao sampleDao) {
		this.sampleDao = sampleDao;
	}
}
@Configuration
public class AppCtx {

	@Bean
	public ExDao exDao(){
		return new ExDao();
	}
	
	@Bean
	public SampleDao sampleDao(){
		return new SampleDao();
	}
	
	@Bean
	public ExService exService(){ 
		return new ExService();
	}
	
	@Bean
	public SampleService sampleService(){
		// SampleService클래스 내에서 자동 주입을 이용했기 때문에 setter 메서드를 통해 의존 주입을 하지 않아도 됨 
		SampleService sampleSvc = new SampleService();
		return sampleSvc;
	}
}

SampleService 클래스의 setter 메서드에 @Autowired를 붙였다. 따라서 설정 클래스 AppCtx의 sampleService() 메서드 내에서 sampleSvc 객체에 setter 메서드를 이용해 의존 주입을 하지 않아도 된다.

 

빈 객체의 메서드에 @Autowired 애노테이션을 붙이면 스프링이 해당 메서드를 호출하고, 메서드 파라미터 타입에 해당하는 빈 객체를 찾아 파라미터로 주입한다. 즉 setExDao() 메서드의 exDao 파라미터에는 ExDao 타입의 빈 객체를, setSampleDao() 메서드의 sampleDao 파라미터에는 SampleDao 타입의 빈 객체를 찾아서 주입해준다.


지금까지 @Autowired 애노테이션을 이용하여 필요한 빈 객체를 의존 대상 객체에 주입하는 방법 두 가지를 알아보았다. 다음 포스트에서는 의존 객체를 한정할 수 없는 경우 발생하는 에러와 해결 방법에 대해서 알아볼 것이다.

 


 

참고 서적: <초보 웹 개발자를 위한 스프링 5 프로그래밍 입문>

 

초보 웹 개발자를 위한 스프링5 프로그래밍 입문

COUPANG

www.coupang.com

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

 


Spring Framework 시리즈

  1. 스프링 프로젝트 시작하기 (Maven)
  2. 스프링 컨테이너(Container) 의미
  3. Dependency, DI, Assembler (의존, 의존 주입, 주입기) 개념 정리
  4. 스프링에서의 의존 주입(DI)의 의미와 사용법
  5. 스프링 애노테이션을 사용한 의존 주입(DI)

 

 

728x90

댓글