ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] Constructor injection(생성자 주입) vs Field injection (필드 주입)
    개발 2023. 1. 16. 15:24

    오늘 기존소스를 수정하다 보니 @RequiredArgConstructor를 선언하고 private final로 주입해서 사용하는 생성자 주입 케이스와

    @Autowired를 사용해서 주입하는 필드 주입 케이스가 공존하는 것을 보고 일괄로 수정하려다 두가지가 정확히 무슨차이가 있을까 고민한 내용을 포스팅한다.

     

    1. Contructor Injection (생성자 주입)

    @RequiredArgsConstructor
    public class DataAggregationController {
    	private final DataImportService dataImportService;
    	private final DataExportService dataExportServcie;
    	
        ...
    }

    2. Field Injection (필드 주입)

    public class BatchConfig {
    
        @Autowired
        private JobBuilderFactory jobBuilderFactory;
    
        @Autowired
        private StepBuilderFactory stepBuilderFactory;
    
    	....
    }

    생성자 주입의 장점

    - 순환 참조 방지

    객체에 의존성을 주입하다 보면 순환 참조 되는 문제가 발생할 수 있다. A class -> B class / B class -> A class 이런 식으로.

    필드 주입 같은 경우 서버는 실행 되겠지만 곧 StackOverflowError를 띄우며 순환참조로 죽는다. (dfs시 탈출로직을 안세우면 무한으로 도는것 마냥?) 생성자 주입 같은 경우는 애초에 서버에서 context cycle이 존재한다고 실행되지 않는다.

    - final로 선언하여 사용 가능

    - Test시 편리

     

    '개발' 카테고리의 다른 글

    Spring Multi Module  (0) 2022.12.29
    Eureka - [Spring Cloud]  (0) 2022.12.29
    Gradle 기본 정리  (0) 2022.12.21
    Effective Java Study - 1  (1) 2022.09.08
    JPA 연관 관계 매핑  (0) 2022.08.02
Designed by Tistory.