Replies: 1 comment
|
Filter Type 옵션 정리 누락 ... |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
6_컴포넌트 스캔
컴포넌트 스캔과 의존관계 자동 주입 시작하기
@Bean이나 XML의<bean>을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열하는 방식을 사용했다.@Autowired라는 기능도 제공한다.새로운 파일
AutoAppConfig.java@ComponentScan을 설정 정보에 붙여준다.@Configuraton이 붙은 설정 정보도 자동으로 등록된다.excludeFilters를 이용해서 설정 정보는 컴포넌트 스캔 대상에서 제외한다.컴포넌트 애노테이션 추가
@Component애노테이션이 붙은 클래스를 스캔하여 스프링 빈으로 등록한다.@configuration소스 코드를 타고 들어가보면@Component애노테이션이 붙어있다. 그래서 컴포넌트 스캔의 대상이 되었던 것이다.-> 위 클래스들이 컴포넌트 스캔의 대상이 되도록
@Component애노테이션을 모두 붙여준다.@Autowired애노테이션도 붙여줘야 한다.테스트 코드
AutoAppconfigTest.java작성AnnotationConfigApplicationContext를 사용하는 것은 기존과 동일AutoAppConfig클래스를 넘겨준다.컴포넌스 스캔과 자동 의존관계 주입
1. @componentscan
@ComponentScan은@Component가 붙은 모든 클래스를 스프링 빈으로 등록@Component("지정이름")2. @Autowired 의존관계 자동 주입
@Autowired를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입getBean(MemberRepository.class)와 동일탐색 위치와 기본 스캔 대상
탐색할 패키지의 시작 위치 지정
@ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작위치로 지정컴포넌트 스캔 기본 대상
@Component뿐만아니라 다음의 것들도 대상에 포함된다.@Component: 컴포넌트 스캔에서 사용@Controller: 스프링 MVC 컨트롤러에서 사용@Service: 스프링 비즈니스 로직에서 사용@Repository: 스프링 데이터 접근 계층에서 사용@Configuration: 스프링 설정 정보에서 사용@Component를 포함하고 있다.@Controller: 스프링 MVC 컨트롤러로 인식@Repository: 스프링 데이터 접근 계층으로 인식하고, 데이터계층의 예외를 스프링 예외로 변환해준다.**@Configuration: 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리@Service: 특별한 처리는 하지 않지만, 비즈니스 로직을 담고 있고 비즈니스 계층을 인식하는데 도움을 준다.필터
includeFilters: 컴포넌트 스캔 대상을 추가로 지정excludeFilters: 컴포넌트 스캔에서 제외할 대상을 지정테스트 코드로 확인
컴포넌트 스캔 대상에 추가할 애노테이션
MyIncludeComponent컴포넌트 스캔 대상에서 제회할 애노테이션
MyExcludeComponent컴포넌트 스캔 대상에 추가할 클래스
BeanA컴포넌트 스캔 대상에서 제외할 클래스
BeanB설정 정보와 전체 테스트 코드
ComponentFilterAppConfigTest.javaincludeFilters에MyIncludeComponent애노테이션을 추가해서 BeanA가 스프링 빈에 등록되었다.excludeFilters에MyExcludeComponent애노테이션을 추가해서 BeanB가 스프링 빈에 등록되지 않는다.중복 등록과 충돌
컴포넌트 스캔에서 같은 빈 이름을 등록하여 충돌하는 경우는 위와 같이 2가지 경우가 존재한다.
자동 빈 등록 vs 자동 빈 등록
ConflictingBeanDefinitionException예외 발생수동 빈 등록 vs 자동 빈 등록
All reactions