@Bean을 이용한 빈 등록과 의존관계 주입
자바 설정파일에 애플리케이션에서 동작하는 모든 빈을 명시하는 것은 불편함
=> 컴포넌트 스캔을 이용하면 클래스를 작성하는 동시에 빈 등록 및 의존관계 설정이 가능 !
@Configuration // 설정파일로 사용
// @Component가 명시된 클래스를 스캔하여 자동으로 빈 등록
@ComponentScan
public class ComAppConfig {
}
@Configuration : 설정파일로 사용
@ComponentScan : @Component가 명시된 클래스를 스캔하여 자동으로 빈 등록
@Component
public class MemberServiceImpl implements MemberService{
private final MemberStroragy memberStroragy;
@Autowired
public MemberServiceImpl(MemberStroragy memberStroragy) {
this.memberStroragy = memberStroragy;
}
Bean으로 등록할 클래스에 @Component 붙이고 생성자 위에 @Autowired를 붙여 의존관계를 설정한다.
@Component를 붙여 빈을 등록하면 클래스의 이름의 첫 문자를 소문자로 바꾼 것이 빈의 이름(id)가 된다! 직접 빈의 이름을 지정하고 싶으면 @Component("빈이름")
을 사용하면 된다.
@Configuration // 설정파일로 사용
// @Component가 명시된 클래스를 스캔하여 자동으로 빈 등록
@ComponentScan (
// 제외 필터
excludeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION, classes =Configuration.class)
)
public class ComAppConfig {
}
includeFilters - 포함
excludeFilters - 제외
스프링부트 시작 시,,
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BookApplication {
public static void main(String[] args) {
SpringApplication.run(BookApplication.class, args);
}
}
@SpringBootApplication 에 @ComponentScan 포함되어 있음
(Autowored의 위치에 따른 주입 방법 구분)
private
@Autowired MemberStroragy memberStroragy;
public MemberServiceImpl(MemberStroragy memberStroragy) {
this.memberStroragy = memberStroragy;
}
생성자에서 의존관계를 설정한다.
생성자 주입은 빈을 생성할 때 의존성 주입도 같이 발생한다.
immutable
- final 키워드 사용 가능
테스트 코드 작성 편리
SRP(단일책임원칙)을 지킬 수 있음 - 생성자를 작성할때, 많은 인자가 필요하다면 이는 SRP위반을 알리는 신호가 될 수 있음
순환 참조 방지
- 필드/수정자 주입은 런타임시에, 생성자 주입은 컴파일 시에 발견
@Autowired
public void setMemberStoragy(MemberStoragy memberStoray){
this.memberStoray = memberStoray;
}
public MemberServiceimpl(MemberStoray memberStoray){
this.memberStoray = memberStoray;
}
setter를 이용하여 의존관계를 주입한다. 선택, 변경 가능성이 있는 의존관계에 사용한다.
@Autowired
private MemberStoragy memberStoragy;
필드에 @Autowired 어노테이션을 붙여주면 자동으로 의존성이 주입된다.