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
- thymeleaf
- 코드업
- 알고리즘
- 기초100제
- 클린코드
- MySQL
- 파이썬
- GitHub
- mariadb
- H2 설치
- Spring Boot
- Gradle
- springboot
- golang
- 스프링
- Postman
- 클린 코드
- Python
- Vue.js
- java
- 롬복
- go
- spring security
- Codeup
- 티스토리챌린지
- Spring
- 오블완
- Git
- JPA
- 객사오
Archives
- Today
- Total
nyximos.log
[Spring] 컴포넌트 스캔과 @Autowired 본문
자바코드의 @Bean이나 XML의 <bean>등을 통해 개발자가 직접 스프링 빈을 등록해야 했지만
이렇게 직접 등록할 때는 단점이 많다.
1. 귀찮다.
2. 설정 정보가 커진다.
3. 누락할 수도 있다.
🤹♀️ 그래서 스프링은 컴포넌트 스캔 기능을 제공한다.
@ComponentScan
설정 정보에 붙이면 자동으로 스프링 빈을 등록한다.
+ @Configuration에도 @Component가 붙어있다.
@Autowired
의존관계를 자동으로 주입한다.
생성자에서 여러 의존관계를 한꺼번에 주입받을 수도 있다.
컴포넌트 스캔과 자동 의존관계 주입 동작 순서
1. @ComponentScan
: @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다.
2. @Autowired 의존관계 자동 주입
: 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아 주입한다.
basePackages
탐색할 패키지의 시작위치를 지정할 수 있다.
지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작위치가 된다.
+ 설정 정보 클래스의 위치를 프로젝트 최상단에 두면 편하다.
컴포넌트 스캔 기본 대상
- @Controller : 스프링 MVC 컨트롤러로 인식
- @Repository : 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다.
- @Configuration : 앞서 보았듯이 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.
- @Service : 개발자들이 작성한 핵심 비즈니스 로직이 여기에 있겠구나 라고 비즈니스 계층을 인식하는데 도움이 된다
Filter
includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다.
excludeFilters를 이용하면 컴포넌트 스캔 대상에서 제외할 설정정보를 지정할 수 있다.
FilterType 옵션
- ANNOTATION: 기본값, 애노테이션을 인식해서 동작한다.
- ASSIGNABLE_TYPE: 지정한 타입과 자식 타입을 인식해서 동작한다.
- ASPECTJ: AspectJ 패턴 사용
- REGEX: 정규 표현식
- CUSTOM: TypeFilter 이라는 인터페이스를 구현해서 처리
참조
김영한, 스프링 핵심 원리 - 기본편 https://inf.run/ryWP
'Programming > Spring' 카테고리의 다른 글
[Spring] 다양한 의존관계 주입 방법 (0) | 2022.01.14 |
---|---|
[Spring] 싱글톤 컨테이너란? (1) | 2022.01.13 |
[Spring] @Configuration, @Bean, 스프링 컨테이너 (2) | 2022.01.12 |
[Spring] IoC, DI, 컨테이너에 대해 알아보자 (0) | 2022.01.11 |
[Spring] 좋은 객체 지향 설계의 5가지 원칙 SOLID (0) | 2022.01.09 |