티스토리 뷰
회사에서 근무 할때나 팀원들과 프로젝트 할때 패키지 경로에 대한 생각을 해본 적이 없었다.
그래서 이번 토이 프로젝트에서 @SpringBootApplication어노테이션이 붙어있는 패키지와 다른 패키지안에
@Configuration이나 @EnableWebSocket등을 다 해줬는데도 설정을 읽어오지 못 했다.
몇시간, 이틀내내 찾아보다가 패키지를 @SpringBootApplication이 붙여져있는 클래스 패키지 하위로 넣었더니
잘 작동 되었다....
이유인 즉슨 Component Scan이 안된것 이다.
이 인터페이스는 많은 역할 을 하고있다.
@EnableAutoConfiguration : 스프링의 설정이 자동 완료된다.
@ComponentScan : 컴포넌트 자동 검색 및 구성이 가능하다.
@SpringBootConfiguration : configuration으로 작동하게 해준다. (자바 기반 설정파일)
가장 중요한 부분은
이 부분인데 자세히 보면 ComponentScan.class 어노테이션을 사용해서 속성값을 basePackages로 두고 있다는 것이다.
이 말인 즉슨 해당 패키지부터가 base 패키지여서 이 패키지 밖의 외부 패키지는 ComponentScan을 안한다는 것이다.
그런데 외부 패키지 에 있는 파일들을 ComponentScan을 하고싶다면 ?? 어떻게 할까
@SpringBootApplication이 붙어있는 클래스에
@ComponentScan()을 사용하는데
@ComponentScan(basePackages = {"com.webchat.main.a","com.webchat.main.b"}) 패키지 경로를 통한
basePackages들을 설정하거나
@ComponentScan(basePackageClasses = {projectA.class,projectB.class}) 와 같이 인터페이스 혹은 클래스파일을
이용해서 해당 클래스 파일이 있는 곳을 베이스 패키지로 생각해서 컴포넌트 스캔을 하라는 어노테이션이다.
다음에는 이런 실수를 안하도록 조심해야겠다..
'SPRING 공부 > 어노테이션' 카테고리의 다른 글
@PostConstruct (0) | 2022.02.05 |
---|