Spring 컴포넌트스캔

민박지·2021년 5월 4일
0

Spring

목록 보기
6/10

@Component가 붙은
클래스를 빈에 자동으로 등록함

빈은 등록했지만 의존관계를 알수없음
@Autowired

@ComponentScan은 @Component 가 붙은 모든 클래스를 빈으로 등록함

스프링빈의 기본이름은 클래스명에서 맨앞만 소문자로 사용한다(임의로 부여가능)

생성자에 @Autowired를 지정하면 컨테이너가 자동으로 해당 빈을 찾아서 주입해준다.

이때 조회의 기본전략은 getBean(클래스명.class) 같은식으로 한다.

컴포넌트스캔은 basePackages,baseClasses 로 스캔대상을 지정/제한할수 있다.

붙은 설정정보 클래스 위치가 기본 베이스패키지가 된다.

관례적으로도 @SpringBootApplication에 컴포넌트스캔이 붙어있어서 부트같은경우 기본적으로 제공된다.

다음 클래스들도 컴포넌트 스캔에 포함된다.
@Controlller : 스프링 MVC 컨트롤러에서 사용
@Service : 스프링 비즈니스 로직에서 사용@Repository : 스프링 데이터 접근 계층에서 사용
@Configuration : 스프링 설정 정보에서 사용

어노테이션은 상속관계란게 없다.

어노테이션이 특정 어노테이션을 가지고있다는걸 인식하고 처리하는것은 스프링에서 구현되어있는 기능이다.

필터

컴포넌트스캔을 필터링할수 있다.

includeFilters 를 사용할일은 거의없다.
따라서 Include하는 어노테이션은 따로 사용할필요가 거의 없고(@Component를 사용하면된다)

excludeFilters 로
ExcludeComponent같이 어노테이션을 만들어서 커스텀으로 빈클래스 제외를 구현가능하다.

자동빈등록끼리 같은경우는 당연히 충돌이 난다.

자동 빈 등록 vs 수동 빈 등록의 경우

원래는 수동으로 등록한 빈에 우선권을 가지고 오버라이딩해준다.

하지만 이런경우 실제는 앱이 복잡해질경우 오버라이딩된걸 인식 못하고 설정이 꼬이는 경우가 생긴다.

그래서 스프링 부트는 해당 충돌을 인식하면 오류가 나도록 했다.

profile
개발자

0개의 댓글