Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

Component Scan의 탐색 위치와 스캔 대상 본문

인프런/[인프런] Spring 핵심원리 이해

Component Scan의 탐색 위치와 스캔 대상

Seung__ 2021. 7. 28. 21:05

1. 탐색할 패키지 시작위치 지정(basePackages)


  • 모든 클래스를 다~~ 뒤지면 오래걸린다. 꼭 필요한 위치부터 탐색하도록 하자.
  • 그냥 냅두면 라이브러리까지 다뒤짐....
  • @ComponentScan(
            basePackages = "~~~" )
  • 해당 패키지를 포함해서 하위 패키지를 전부 탐색
  • {"~~", "~~~~"} 여러 패키지를 탐색 시작 위치로 지정 가능
  • @Configuration
    @ComponentScan(
            //스캔에서 제외할 것 -->@ComponentScan도 @Component임, AppConfig나 TestConfig제외하기 위해.
            excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class),
            basePackages = "hello.core"
            
    )
    public class AutoAppConfig {
    
    
    }

  • basePackageClasses는 해당 클래스의 패키지를 시작 위치로 지정.
     

 

 

2.  시작위치 지정하지 않으면???


@ComponentScan을 붙인 클래스의 패키지부터 시작함.

  • 전부 다 뒤질 수 있다.아.... 그래서 밖으로 빼둔건가...????

3. 권장하는 방법


  • 설정정보 클래스를 패키지 위치를 지정하지 않고,
  • 프로젝트 최상단에 두는 것!!! 스프링부트도 이 방법을 기본으로 제공함
  • 그리고 basePackages 생략 ㅋㅋㅋ
  • 또한 프로젝트 메인 설정 정보는 프로젝트를 대표하는 정보이기 때문에!!
  • 프로젝트 시작 루트위치에 두도록 하자.
  • 참고로....스프링 부트의 대표 시작 정보인 @SpringBootApplication를 프로젝트 시작 위치에 두는 것이 관계... 
  • 그리고 @SpringBootApplication 안에 @ComponentScan있음!!

 

4. 기본 스캔 대상


  • @Component : 컴포넌트 스캔에서 사용
  • 아래 annotation은 모두 열어보면 @Component 붙어있음.
  • @Controller : 스프링 MVC컨트롤러에서 사용 -->  MVC Controller로 인식
  • @Service :  스프링 비즈니스 로직에서 사용 --> 특별한 처리 없는데.."비즈니스 로직 여기있어요!"
  • @Repository : 스프링 데이터 접근 계층에서 사용 --> 스프링 데이터 접근 계층으로 인식,
                                                                         데이터 계층의 예외를 스프링 예외로 변환해줌.
  • @Configuration  : 스프링 설정 정보에서 사용 --> 스프링 설정 정보, 스프링 빈이 싱글톤 유지하도록 추가 처리.
  • 사실.. annotation에는 상속관계가 없다. 어떤 annotaion이 특정 annotation을 들고 있는 것을 인식할 수 있는 이유?
  • 스프링에서 지원함... ㅗㅜㅑ
Comments