컴포넌트 스캔
컴포넌트 스캔
- 등록해야 하는 @Bean이 많아지면 프로그래머는 굉장히 힘들것이다. 누락될 수도 있고
- 자동으로 @Bean을 등록해주는 @ComponentScan 기능이 있다. 이런 경우 보통 클래스를 @Component으로 등록하고 각 메소드에 대한 의존관계를 위해 @Autowired를 등록해준다.
- @ComponentScan을 사용하면 @Configuration 이 붙은 설정 정보도 자동으로 등록된다. 그래서 이러한 의존관계 중 일부를 제외하고 싶다면 excludFilters를 사용해서 컴포넌트 스캔 대상에서 제외시킨다.
- @ComponentScan 은 @Component 가 붙은 모든 클래스를 스프링 빈으로 등록한다
-
package hello.core; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; import static org.springframework.context.annotation.ComponentScan.*; @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppConfig { }
- basePackages를 설정하면 packages의 위치부터 ComponentScan 하라는 의미이다. 이 basePackages를 등록하지 않으면 자바 전체 코드를 보기 때문에 시간이 오래 걸린다.
- basePackages를 지정하지 않으면 @ComponentScan 이 붙은 설정 정보 클래스가 패키지 시작 위치가 된다.
- 보통 @SpringBootApplication 안에 @ComponentScan 이 붙어 있기 때문에 프로젝트 루트 위치에 두는것을 권장한다고 한다.
- 아래의 어노테이션들은 Java에서 지원하는 내용은 아니고 Spring에서 지원한다.
-
컴포넌트 스캔은 @Component 뿐만 아니라 다음과 내용도 추가로 대상에 포함한다. @Component : 컴포넌트 스캔에서 사용 @Controlller : 스프링 MVC 컨트롤러에서 사용 @Service : 스프링 비즈니스 로직에서 사용 @Repository : 스프링 데이터 접근 계층에서 사용 @Configuration : 스프링 설정 정보에서 사용
- @interface를 통해서 어노테이션을 생성할 수 있다.
ComponentScan 시 같은 빈 이름 등록은 어떻게 처리할까?
- 자동으로 등록할 수 있다. 그런데 ConflictingBeanDefinitionException 에러를 뿜게 된다.
- 수동 빈과 자동 빈을 등록할 때 프로퍼티에 설정값을 추가해줘야 한다.
- 아래의 경우는 빈을 수동 등록한 코드이다. 같은 빈 이름이 이미 Spring Container에 존재한다면 설정값에 spring.main.allow-bean-definition-overriding=true 을 추가해줘야 수동빈을 오버라이딩하여 처리할 수 있다.
-
@Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { @Bean(name = "memoryMemberRepository") public MemberRepository memberRepository() { return new MemoryMemberRepository(); } }
'Spring' 카테고리의 다른 글
빈 생명주기 & 콜백 (0) | 2021.12.14 |
---|---|
의존관계 자동 주입 (0) | 2021.12.13 |
싱글톤 컨테이너 (0) | 2021.12.12 |
객체 지향 원리 적용 (0) | 2021.12.10 |
Spring 예제 (0) | 2021.12.10 |
댓글
이 글 공유하기
다른 글
-
빈 생명주기 & 콜백
빈 생명주기 & 콜백
2021.12.14 -
의존관계 자동 주입
의존관계 자동 주입
2021.12.13 -
싱글톤 컨테이너
싱글톤 컨테이너
2021.12.12 -
객체 지향 원리 적용
객체 지향 원리 적용
2021.12.10