[Spring] @Autowired 를 사용하여 빈 주입시, 언제 생략이 가능한가. (스프링 버전 4.3)
2023. 6. 14. 12:46
반응형
보통 스프링에서 빈 주입을 할 때, 다음과 같이 사용을 한다.
@Component
@RequiredArgsConstructor
public class MadExample {
private final HelloService helloService;
... 생략 ...
}
lombok의 @RequiredArgsConstructor 을 사용하여 초기화 되지 않은 final 필드나 @NonNull이 붙은 필드에 대해 생성자를 생성해 주어, 주로 의존성 주입(Dependency Injection) 편의성을 위해 사용한다.
어떠한 빈(Bean)에 생성자가 오직 하나만 있고, 생성자의 파라미터 타입이 빈으로 등록가능한 존재라면, 이 빈은 @Autowired 어노테이션 없이도 의존성 주입이 가능하다.
회사 동료는 필드 주입으로 되어있던 코드들을 생성자 주입으로 변경하는 중이었다. (생성자 주입을 권장하는 이유) 빈에 @RequiredArgsConstructor 나 @AllArgsConstructor를 사용했지만 빈 생성 오류가 난다는 연락을 받았다.
Lombok
1) 프로젝트에 lombok 라이브러리가 설치되어 있는지 확인
2) IDE(IntelliJ)에 lombok 플러그인이 추가되어있는지 확인
-
Settings > Plugins > Lombok Plugin 설치
-
Settings > Build, Execution, Deployment > Compiler > Annotation Processors Enable annotation processing 활성화
스프링 버전
스프링 버전과 빈 주입의 상관관계가 있을 것 같아서 찾아보았다. 아래처럼 Spring 4.3부터 생성자가 오직 하나만 있고, 생성자의 파라미터 타입이 빈으로 등록가능한 존재라면, 이 빈은 @Autowired 어노테이션을 생략할 수 있다고 한다.
Starting with Spring 4.3, if a class, which is configured as a Spring bean, has only one constructor, the @Autowired annotation can be omitted and Spring will use that constructor and inject all necessary dependencies.
As of Spring Framework 4.3, an @Autowired annotation on such a constructor is no longer necessary if the target bean defines only one constructor to begin with. However, if several constructors are available and there is no primary/default constructor, at least one of the constructors must be annotated with @Autowired in order to instruct the container which one to use. See the discussion on constructor resolution for details.
해당 프로젝트의 스프링 버전은 4.1.2였고, @Autowired 생략이 불가능해 생성자 주입을 할 때 @Autowired를 명시적으로 작성해줘야 한다.
728x90
반응형
'web > Spring' 카테고리의 다른 글
[Spring] RestTemplate은 Thread Safe할까? / RestTemplate 타임아웃(Timeout), 재시도(Retry), 로깅(Logging) 설정하기 (0) | 2023.07.21 |
---|---|
[Spring] 생성자 주입을 필드 주입보다 권장하는 이유 (2) | 2023.06.12 |
[Spring] ResponseEntity 와 @ResponseStatus (0) | 2023.03.30 |
[Spring JPA] Entity의 equals와 hashCode (0) | 2023.02.28 |
[Spring Security] SecurityConfig 리팩토링 - WebSecurityConfigurerAdapter 상속 제거, Resource Filter Chain 설정 (0) | 2023.01.16 |
Written by ner.o
개발자 네로의 개발 일기,
자바를 좋아합니다 !
댓글 개