
오늘은 김영한 선생님께서 자동 의존관계 주입시스템이 있다고 하셔서 열심히 강의를 들었다. 내용은 다음과 같다.
ackage hello.core;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
@Configuration
@ComponentScan(
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Configuration.class)
) //애노 테이션이 붙은 것들을 스프링 빈으로 등록시켜준다 // AppConifg를 빼고 등록시키기 위해서 이런짓을 한다.
public class AutoAppConfig {
}
이전에 AppConfig에서는 의존관계를 직접 수정해줘야 했지만, 이번에는 자동으로 의존관계를 주입해준다.

@ComponentScan(
basePackages = "hello.core.member",
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Configuration.class)
) //애노 테이션이 붙은 것들을 스프링 빈으로 등록시켜준다 // AppConifg를 빼고 등록시키기 위해서 이런짓을 한다.
public class AutoAppConfig {
}
basePackages 를 통해서 원하는 패키지의 시작위치를 지정할 수 있다.
권장하는 방법
개인적으로 즐겨 사용하는 방법은 패키지 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것이다. 최근 스프링 부트도 이 방법을 기본으로 제공한다.
컴포넌트 스캔은 @Component 뿐만 아니라 다음과 내용도 추가로 대상에 포함한다.
참고 : 에노테이션에는 상속 관계라는 것이 없다. 애노테이션이 특정 애노테이션을 들고 있는 것을 인식할 수 있는 것은 spring이 해주는 것 이다.
컴포넌트 스캔의 용도 뿐만 아니라 다음 애노테이션이 있으면 스프링은 부가 기능을 수행한다.
참고: useDefaultFilters 옵션은 기본으로 켜져있는데, 이 옵션을 끄면 기본 스캔 대상들이 제외된다. 이런 옵션이 있다고만 알고 있자.
@Configuration
@ComponentScan(
includeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class),
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class)
)
@ComponentScan(
includeFilters = {
@Filter(type = FilterType.ANNOTATION, classes =
MyIncludeComponent.class),
},
excludeFilters = {
@Filter(type = FilterType.ANNOTATION, classes =
MyExcludeComponent.class),
@Filter(type = FilterType.ASSIGNABLE_TYPE, classes = BeanA.class)
}
)
오류메세지만 잘 보면 spring 에러는 다 잡을 수 있다.
@Configuration
@ComponentScan(
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes =
Configuration.class)
)
public class AutoAppConfig {
@Bean(name = "memoryMemberRepository")
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
수동 빈이 자동 빈보다 우선권을 가진다.
(수동 빈이 자동 빈을 오버라이딩 해버린다.)
"어설픈 추상화, 어설픈 우선순위 보다는 명확하게 코드를 쓰거나, 빨리 오류가 나서 팅기는게 좋다." - 김영한 강사님
오늘은 자동의존관계 주입에 대해서 공부했다. 계속해서 느끼는데, 그냥 스프링 컨테이너에 넣어서 사용하는 방법만 지금 2주동안 공부하는 느낌이다. 실질적인 개발을 원하는데 점점 이론에 지쳐가는 느낌이지만, 기본기가 가장 중요한 것이므로 참고 열심히해보자. 같이 모각소하는 팀원들이 앞으로도 팀프로젝트를 같이할 팀원들이여서 더 열심히 하게되는 것 같다. 모각소 앞으로도 애용해보자. 애옹
출처: 김영한 강사님의
스프링 핵심 원리 - 기본편