이전 포스트에서는 설정 클래스에서 생성자 또는 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 프로그래밍 입문>
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
Spring Framework 시리즈
- 스프링 프로젝트 시작하기 (Maven)
- 스프링 컨테이너(Container) 의미
- Dependency, DI, Assembler (의존, 의존 주입, 주입기) 개념 정리
- 스프링에서의 의존 주입(DI)의 의미와 사용법
- 스프링 애노테이션을 사용한 의존 주입(DI)
'Java > [스프링 5 프로그래밍 입문]' 카테고리의 다른 글
[Spring] 의존 자동 주입(3) - @Autowired의 필수 여부, 자동 주입과 명시적 의존 주입 (0) | 2021.07.31 |
---|---|
[Spring] 의존 자동 주입(2) - 빈 이름과 한정사 (0) | 2021.07.31 |
[Spring] 스프링 애노테이션을 사용한 의존 주입(DI) (0) | 2021.07.28 |
[Spring] 스프링에서의 의존 주입(DI)의 의미와 사용법 (0) | 2021.07.28 |
Dependency, DI, Assembler (의존, 의존 주입, 주입기) 개념 정리 (0) | 2021.07.22 |
댓글