티스토리 뷰
초보 웹 개발자를 위한 스프링 5 프로그램 입문을 보고 복습 겸 개인 학습 정리입니다. (windows 기준)
컴포넌트 스캔
자동 주입과 함께 사용되는 추가기능
스프링이 직접 클래스를 검색하여 빈으로 등록해주는 기능
@Component 애너테이션으로 스캔 대상 지정
@Component 애너테이션은 해당 클래스를 스캔 대상으로 표시하기 때문에 스프링이 클래스를 검색하여 빈으로 등록하게하려면 이 클래스에 @Component 애너테이션을 붙여야한다.
@Component 애너테이션에 속성값을 줄 수 있다. 속성값을 주면 그 값을 빈 이름으로 사용한다.
import org.springframework.stereotype.Component;
// 속성값을 붙이면 빈 이름은 속성값이 빈 이름이다.
@Component("infoprinter")
public class MemberInfoPrinter {
private MemberDao memDao;
private MemberPrinter printer;
.. 내용 생략...
}
속성값을 주지 않았다면 클래스 이름의 첫 글자를 소문자로 바꾼 이름을 빈 이름으로 사용한다.
import org.springframework.stereotype.Component;
// 속성값이 없으면 빈 이름은 클래스의 이름의 첫 글자를 소문자로 바꾼 이름을 빈 이름이된다
@Component
public class MemberDao {
... 내용 생략...
}
+ 기본 스캔 대상
@Component 애너테이션을 붙인 클래스 외 다른 애노테이션을 붙인 클래스도 컴포넌트 스캔 대상에 포함된다.
@Component(org.springframework.stereotpye 패키지)
@Controller(org.springframework.stereotpye 패키지) ← 웹 MVC와 관련있음
@Service(org.springframework.stereotpye 패키지)
@Repository(org.springframework.stereotpye 패키지) ← DB 연동과 관련있음
@Aspect(org.aspectj.lang.anntation 패키지)
@Configuration(org.springframework.context.annotation 패키지)
@ComponentScan 애너테이션으로 스캔 대상 설정
@Component 애너테이션을 붙인 클래스를 스캔하여 빈으로 등록하게하려면 설정 클래스에 @ConponentScan 애노테이션을 적용해야한다.
아래 설정 클래스에 붙인 @ComponentScan 애너테이션의 basePackages 속성값은 {"spring"}인데, 이 속성은 스캔 대상 패키지 목록을 지정한다. 즉, spring 패키지와 그 하위 패키지에 속한 클래스를 스캔 대상으로 설정하는 것.
스캔 대상에 해당하는 클래스 중에서도 @Component 애노테이션이 붙은 클래스의 객체를 생성하여 빈으로 등록한다.
import org.springframework.context.annotation.ComponentScan;
... 생략 ...
@Configuration
@ComponentScan(basePackages = {"spring"})
public class AppCtx {
@Bean
public MemberDao memberDao() {
return new MemberDao();
}
... 생략 ...
}
스캔 대상에서 제외 또는 포함
excludeFilters 속성을 사용하여 특정 대상을 스캔 대상에서 제외시킬 수 있다.
@Fliter 애노테이션의 tpye 속성값으로 제외할 대상을 어떤 식으로 지정할 건지 설정할 수 있다.
type 속성값으로 정규표현식, AspectJ 패턴, 특정 애노테이션 등 필터 타입을 설정할 수 있다.
(FilterType.REGEC, FilterTpye.ASPECTJ, FilterType.ANNOTATION...)
두 개 이상의 필터를 설정할 시 excludeFilter 속성에 배열을 사용하면된다.
※ patterns 속성은 String[] 타입이므로 배열을 이용해서 패턴을 한 개 이상 지정할 수 있다.
※ AspectJ 패턴이 동작하려면 의존 대상에 aspectjweaver 모듈을 추가해야한다.
@Configuration
@ComponentScan(basePackages = {"spring"}
/*
1.excludeFilters = @Filter(type = FilterTpye.REGEX, pattern = "spirng\\..*Dao")
정규표현식을 사용해서 제외 대상을 지정
2.excludeFilters = @Filter(type = FilterTpye.ASPECTJ, pattern = "spirng.Dao")
AspectJ 패턴을 사용해서 제외 대상을 지정
3.excludeFilters = @Filter(type = FilterTpye.ANNOTATION,
classes = {Noproduct.class, ManualBean.class}))
특정 Annotation을 붙인 클래스를 제외 대상으로 지정
4.excludeFilters = {
@Filter(type = FilterTpye.REGEX, pattern = "spirng\\..*Dao")
@Filter(type = FilterTpye.ANNOTATION, classes = Noproduct.class)
}} 두 개 이상일 경우 배열로 묶어 준다
*/
public class AppCtxWithExclude {
.. 내용 생략 ..
}
'study > Spring' 카테고리의 다른 글
chap 07 - AOP 프로그래밍 (0) | 2023.01.10 |
---|---|
chap 06 - 빈 라이프사이클 & 범위 (0) | 2023.01.09 |
chap 04 - 의존 자동 주입 (0) | 2023.01.04 |
chap 03 - 스프링 DI (Dependency injection) (0) | 2022.12.05 |
환경 변수 설정 (windows 기준으로 설치) (0) | 2022.11.29 |
- Total
- Today
- Yesterday
- python3
- Spring
- 톰캣
- Python
- musma
- error: failed to push some refs to 'https://github.com/
- 한글 형태소 분석기
- 면접을 위한 CS 전공 지식 노트
- git 공부
- git공부
- git
- 환경 변수 설정
- 검색 결과 내 페이지네이션
- django-environ
- Magazine K
- django
- 혼자 공부하는 파이썬
- 회원가입
- 배열
- 회원 로그인
- API
- path variable
- 디자인 패턴
- 커맨드 객체
- django.contrib.auth
- Django tutorial
- authenticate()
- 암호화
- 웹페이지
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |