컴포넌트 스캔(Component Scan)
설정 정보(AppConfig.class) 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공
스프링 빈 등록 ->직접 자바 코드로 등록하는 방법, 컴포넌트 스캔과 자동의존관계를 설정하는 @Autowired 사용 방법
@ComponentScan은 탐색 위치에 @Component가 붙은 모든 클래스를 스프링 빈으로 등록
기본적으로 빈 이름은 맨 앞글자를 소문자로 변경해서 사용하고 어노테이션 뒤에 ("문자열")을 사용해 직접 설정할 수도 있음
탐색범위(basePackages)
필요한 위치부터 탐색할 수 있도록 탐색 시작 위치를 지정할 수 있음
basePackages : 탐색 시작 위치 지정, 해당 패키지부터 하위까지
basePackagesClasses : 클래스가 속한 패키지를 탐색 시작 위치로 지정
특별한 지정이 없으면 @ComponentScan 어노테이션이 있는 설정 정보 클래스의 패키지가 시작점
설정 정보 클래스의 위치가 프로젝트 최상단에 있고 패키지 위치는 지정하지 않으면 속도는 느리더라도 편함
스프링 부트 사용시 @SpringBootApplication 어노테이션을 프로젝트 시작 루트에 두는데 여기에는 @ComponentScan 어노테이션이 포함
컴포넌트 스캔의 기본 대상
@Component : 컴포넌트 스캔에서 사용
@Controller & @RestController : 스프링 MVC 및 REST 전용 컨트롤러에서 사용
@Service : 스프링 비즈니스 로직에 사용. 특별한 처리는 하지 않고, 비즈니스 계층을 인식하는데 도움
@Repository : 스프링 데이터 접근 계층에서 사용. 스프링 데이터 접근 계층으로 인식. 데이터 계층의 예외를 스프링 예외로 변환.
@Configuration : 스프링 설정 정보에서 사용. 스프링 설정 정보로 인식. 스프링 빈이 싱글톤을 유지하도록 추가 처리.
@Controller, @Service, @Repository는 @Component 어노테이션을 포함
필터(Filter)
필터 타입 옵션
ANNOTATION : 기본값으로 어노테이션으로 인식해서 동작
SSIGNABLE_TYPE : 지정한 타입과 자식 타입을 인식해서 동작
ASPECTJ : AspectJ 패턴을 사용
REGEX : 정규표현식을 나타냄
CUSTOM : TypeFilter라는 인터페이스를 구현해서 처리
컴포넌트 스캔의 중복 등록과 충돌
자동 / 수동 빈 등록과 빈 등록의 충돌
자동인 경우 -> 이미 같은 이름의 스프링 빈이 있으면 ConflictingBeanDefinitionException 예외 발생
수동인 경우 -> 수동과 자동 중 수동 등록이 우선순위. 자동 등록 빈을 오버라이딩
--> 스프링 부트에서는 수동 - 자동 중복 등록인 경우 충돌 오류를 발생시켜 중복 등록 방지함
'[ Development ] > [ Back-end ] Spring 기본' 카테고리의 다른 글
[Spring/Swagger] SpringBoot의 Spring Security 환경에서 Swagger 적용시 로그인 화면 임시 해결 방법 (0) | 2024.02.15 |
---|---|
[Spring/Swagger] 스프링부트에서 Swagger 사용하기 :: springdoc-openapi-ui 라이브러리 (0) | 2024.02.15 |
[Spring 스프링 기본] 의존관계 자동 주입 (0) | 2023.12.26 |
[Spring 스프링 기본] 싱글톤 컨테이너 (1) | 2023.11.28 |
[Spring 스프링 기본] 스프링 컨테이너와 스프링 빈 (0) | 2023.11.21 |
[Spring 스프링 기본] 객체 지향 원리 적용 (0) | 2023.11.14 |
[Spring 스프링 기본] 2. 핵심 원리 이해 1 - 예제 만들기 (0) | 2023.11.07 |