250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 코딩테스트
- DI
- 싱글톤
- 코드트리
- 인터페이스
- html form
- fielderror
- 프록시
- 추상클래스
- java
- 의존관계
- 테스트코드
- equals()
- 다형성
- 백준
- 티스토리챌린지
- JSON
- HttpServletResponse
- ocp
- 참조변수
- http 메시지 컨버터
- 오버라이딩
- 스프링
- 서블릿
- 스프링컨테이너
- 김영한
- objecterror
- @configuration
- 오블완
- 코드트리조별과제
Archives
- Today
- Total
minOS
컴포넌트 스캔(2) - 탐색 위치와 기본 스캔 대상 본문
728x90
탐색할 패키지의 시작 위치 지정
모든 자바 클래스를 전부 컴포넌트 스캔하면 시간이 오래걸린다. 필요한 위치부터 탐색할 수 있도록 지정할 수 있다.
- basePackages : 탐색할 패키지의 시작위치를 지정한다. 이 패키지를 포함하여 하위 패키지를 모두 탐색한다.@Configuration @ComponentScan( basePackages = "com.example.core.member", excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) //이 필터는 @Configuration이 등록된 AppConfig등의 설정 정보 등록과 실행을 막는다 ) // 스프링빈 자동으로 끌어올림 public class AutoAppConfig { }
basePackages={"com.example.core","com.example.core.member"} 이렇게 여러 시작 위치를 지정할 수도 있다.
- basePackageClasses : 지정한 클래스의 패키지를 탐색 시작 위로 지정한다.@Configuration @ComponentScan( basePackageClasses= AutoAppConfig.class, ///basePackages = "com.example.core.member", excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) //이 필터는 @Configuration이 등록된 AppConfig등의 설정 정보 등록과 실행을 막는다 ) // 스프링빈 자동으로 끌어올림 public class AutoAppConfig { }
- 만약 지정하지않으면 @ComponentScan이 붙은 설정정보 클래스의 패키지가 시작위치가 된다
권장
패키지 위치를 지정하지않고, 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것 . 스프링 부트도 이 방법을 기본으로 제공한다.
스프링 부트를 사용하면 스프링 부트의 대표 정보인 @SpringBootApplication를 프로젝트 시작 루트 위치에 두는 것이 관례이다. (이 설정안에 @ComponentScan이 들어있다.)
컴포넌트 스캔 기본 대상
컴포넌트 스캔은 @Component뿐만 아니라 아래의 애노테이션 내용도 추가로 컴포넌트 스캔 대상에 포함한다.
- @Controller: 스프링 MVC 컨트롤러에서 사용
- @Service: 스프링 비지니스 로직에서 사용
- @Repository: 스프링 데이터 접근 계층에서 사용
- @Configuration : 스프링 설정 정보에서 사용
참고
애노테이션은 상속 관계라는 것이 없다. 그래서 애노테이션이 특정 애노테이션은 들고 있는 것을 인식할 수 있는 것은 자바 언어가 지원하는 기능이 아니고 스프링 기능이다.
컴포넌트 스캔 뿐만 아니라 다음 애노테이션이 있으면 스프링 부가 기능을 수행한다.
- @Controller: 스프링 MVC 컨트롤러로 인식
- @Service: 개발자들의 핵식 비지니스 로직 계층을 인식하는데 도움이 된다.
- @Repository: 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다.
- @Configuration : 스프링 설정 정보를 인식하고 ,스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.
useDefaultFilters옵션이 기본으로 켜져있다. 이 옵션을 끄면 기본 스캔 대상들이 제외된다.
728x90
'TIL > 김영한의 스프링 핵심 원리' 카테고리의 다른 글
의존관계 자동 주입(1) - 다양한 의존관계 주입 방법 (0) | 2024.04.06 |
---|---|
컴포넌트 스캔(3) - 중복 등록과 충돌 (0) | 2024.04.06 |
컴포넌트 스캔 (1)- 컴포넌트 스캔과 의존관계 자동 주입 (0) | 2024.03.29 |
싱글톤 컨테이너(4) - @Configuration과 바이트코드 (0) | 2024.03.13 |
싱글톤 컨테이너(3) - @Configuration과 싱글톤 (0) | 2024.03.13 |