5-1. @Component : 스캔 대상 지정
- 클래스를 스캔 대상으로 지정
@Component
public class MemberDao {
...
}
- memberDao로 지정됨
@Component("infoPrinter")
public class MemberInfoPrinter {
...
}
- infoPrinter로 지정됨
5-2 @ComponentScan 스캔 설정(등록)
- @Component 를 붙인 클래스를 스캔해서 빈으로 등록
@Configuration
@ComponentScan(basePackages = {"spring"})
public class AppCtx {
@Bean
@Qualifier("printer")
public MemberPrinter memberPrinter1() {
return new MemberPrinter();
}
}
- (basePackages = {"spring"}) : 스캔 대상 패키지 목록 지정
- spring 패키지와 그 하위 패키지에 속한 클래스를 스캔대상으로 설정
- spring 패키지 내부에 @Component 가 붙여진 클래스가 빈에 적용된다.
5-3. 예제
- Component 이름 등록X
MemberRegisterService regSvc = ctx.getBean(MemberRegisterService.class);
MemberRegisterService regSvc =
ctx.getBean("memberRegisterService", MemberRegisterService.class);
→ 맨 앞 글자 소문자로 적용된다.
- Component 이름 등록
MemberInfoPrinter infoPrinter = ctx.getBean("infoPrinter", MemberInfoPrinter.class);
MemberInfoPrinter infoPrinter = ctx.getBean(MemberInfoPrinter.class);
5-4. 스캔 대상에서 제외
먼저, **@Retention, @Target에 대하여!!!
- **@Retention : 선언된 대상(@Target)의 메모리를 언제까지 유지할 것인지 결정하는 애노테이션
- SOURCE = 실제 동작할땐 영향안줌(사실상 주석)
- CLASS = 역시 어플리케이션 동작할땐 영향안줌(클래스파일에는 코드가 존재한다)
- RUNTIME = 어플리케이션 동작하는동안 항상 영향을 미침(거의 이것만 사용한다고 생각해도됨)
@Retention(RUNTIME)
- **@Target : 적용될 대상 지정!
- TYPE : 클래스, 인터페이스에 선언
- FIELD : 상수 포함 객체 필드에 선언
- PARAMETER : 일반적인 파라미터에 선언
- … 여러가지
5-4-1. 스캔 대상 제외
- 대상을 구분할 수 있는 어노테이션 생성
@Retention(RUNTIME)
@Target(TYPE)
public @interface NoProduct {
}
@Retention(RUNTIME)
@Target(TYPE)
public @interface ManualBean {
}
- Filter로 제외 대상 지정
excludeFilters = {
`@Filter(type = FilterType.ANNOTATION, classes = {ManualBean.class, NoProduct.class}`
}
@Configuration
@ComponentScan(basePackages = {"spring", "spring2" },
excludeFilters = {
@Filter(type = FilterType.ANNOTATION, classes = {ManualBean.class, NoProduct.class} )
})
- FilterType
- REGEX
- ASPECTJ
- ANNOTATION
5-4-1. 예제
- 스캔 대상 이름이 같지만, 제외를 하여 에러발생하지않음!
5-4-2. 기본 스캔 대상
- @Component
- @Controller
- @Service
- @Repository
- @Configuration
- @Aspect : ??
'공부 > Spring' 카테고리의 다른 글
[chap7] AOP 프로그래밍 (0) | 2022.05.20 |
---|---|
[chap6] 빈 라이프사이클과 범위 (0) | 2022.05.20 |
[chap4] 의존 자동 주입 (0) | 2022.05.20 |
[chap3] 스프링 DI (0) | 2022.05.20 |
[chap2] 스프링 (0) | 2022.05.20 |
댓글