의존성 주입을 위한 어노테이션들을 정리해보겠습니다.
Spring IoC 컨테이너가 관리하는 자바 객체
@ComponentScan과 @Component 사용
@ComponentScan
@Component
빈 설정 파일에 직접 빈을 등록
@Configuration
# 빈으로 등록하고자 하는 객체를 반환하는 Method를 만들고, @Bean 어노테이션을 붙여 줌
# 아래와 같이 이름을 지정해줄 수도 있고, 지정하지 않으면 메소드 명을 CamelCase로 변경한 것이 이름이 됨
public class SampleConfig {
@Bean(name="testarray")
public ArrayList<String> array() {
return new ArrayList<String>();
}
}
각 상황의 타입에 맞도록 IoC컨테이너 안에 존재하는 Bean을 자동으로 주입해 주며
생성자 주입, 필드 주입, 수정자 주입의 3가지 방법이 있습니다.
순환참조 방지, 오류 방지 등의 이유로 생성자 주입이 가장 권장되는 방식입니다.
@Component
public class Encoder {
// final로 선언이 가능하며 불변성을 보장해줍니다.
private final EncodingService encodingService;
// 단일 생성자인 경우 @Autowired 어노테이션 생략 가능합니다.
public Encoder(@Qualifier("urlEncodingService") EncodingService encodingService) {
this.encodingService = encodingService;
}
}
@Component
public class Encoder {
@Autowired
private EncodingService encodingService;
}
@Component
public class Encoder {
private EncodingService encodingService;
@Autowired
public void setEncodingService(EncodingService encodingService){
this.encodingService = encodingService;
}
}
// 생성자 주입 방식
@Component
public class Encoder {
private final EncodingService encodingService;
public Encoder(EncodingService encodingService) {
this.EncodingService = encodingService;
}
}
// 위와 같은 생성자 주입 방식을 @RequiredArgsConstructor를 사용하여 생성자 생성 생략 가능
@RequiredArgsConstructor
@Component
public class Encoder {
private final EncodingService encodingService;
}
참고