컴포넌트 스캔
: @Component, @Controller, @Service, @Repository, @Configuration 등 애노테이션이 붙은 클래스를 자동으로 스프링 빈으로 등록하는 기능
: 수많은 스프링 빈을 일일이 설정 파일에 등록하는 반복적이고 번거로운 작업을 자동화하여 개발 생산성을 높여준다.
- @Autowired를 사용하면 스프링 컨테이너가 해당 타입에 맞는 빈을 찾아서 자동으로 의존관계를 연결해준다.
- @ComponentScan 어노테이션에 basePackages를 지정하지 않으면, @ComponentScan이 붙은 설정 클래스의 패키지가 기본 탐색 시작 위치가 됩니다.
의존관계 주입은 크게 4가지가 있음.
1. 생성자 주입
2. 수정자 주입
3. 필드 주입
4. 일반 메서드 주입
1. 생성자 주입
- 특징 : 생성자 호출시점에 딱 1번만 호출 보장.
- 불변, 필수 의존관계에 사용
- 만약 생성자가 1개만 있으면 @Autowired를 생략해도 자동 주입이 가능함.
2. 수정자 주입(setter 주입)
- 선택, 변경 가능성이 있는 의존관게에 사용
3. 필드 주입
- 필드에 바로 주입
- 외부에서 의존성을 주입하기 어려워 순수 Java코드로 테스트하기 어렵다.
- 사용하지 말자. -> 테스트 코드에서는 써도 된다.
4. 일반 메서드 주입
- 한번에 여러 필드 주입받을 수 있다.
- 일반적으로 잘 사용하지 않음.
그래서 결론적으로는 생성자 주입을 사용해야 함.
프레임워크에 의존하지 않는다.
final 키워드를 유일하게 사용할 수 있는데, 나머지 주입은 전부 생성자 이후에 호출되므로 final을 호출할 수 없다.
자동 주입 대상에 대한 옵션 처리 (Bean이 없는 경우 예외 처리)
1.
원래는 @Autowired는 (required=true)인데 (required=false)로 처리하면 메서드 자체가 호출이 안된다.
2.
@Nullable은 자동 주입할 대상이 없으면 null이 입력된다.
3.
Optional<>은 자동 주입할 대상이 없으면 Optional.empty가 입력된다.
롬복 라이브러리
@RequiredArgsConstructor
: 생성자 주입 알아서 자동으로 해준다!
'커리어 > 백엔드' 카테고리의 다른 글
| [JPA] 영속성 컨텍스트 (0) | 2025.10.11 |
|---|---|
| [Spring] 빈 생명주기 콜백, 빈 스코프 (4) | 2025.10.09 |
| [Spring] 싱글톤을 스프링에서 보장하는 방법 (2) | 2025.10.07 |
| [Spring] IoC, DI, 컨테이너 (0) | 2025.10.06 |
| [Spring] 객체 지향 설계와 스프링 (0) | 2025.10.04 |