@Autowired
private DependencyA dependencyA;
@Autowired
private DependencyB dependencyB;
@Autowired
private DependencyC dependencyC;
위의 경우 필드 주입인데 이 경우 읽기와 사용하기에 쉽다는 장점이 있다.
private final DependencyA dependencyA;
private final DependencyB dependencyB;
private final DependencyC dependencyC;
@Autowired
public DI(DependencyA dependencyA, DependencyB dependencyB, DependencyC dependencyC) {
this.dependencyA = dependencyA;
this.dependencyB = dependencyB;
this.dependencyC = dependencyC;
}
아래의 경우 Spring에서 추천하는 생성자 주입을 이용한 방식이다.
스프링 4.3의 경우, 단일 생성자를 이용하는 경우에는 @Autowired를 사용하지 않아도 된다.
순환 의존성 확인
필드 주입으로 순환 의존성을 파악하기는 어렵다. 생성자 주입을 하게 되면 서버 순환 의존성을 가지는 요소들을 파악할 수 있게 에러 메세지를 표시 하면서 서버 실해이 되지 않는다.
불변성
생성자 주입에서 final을 붙이는 이유이다. 필드 주입은 final를 선언할 수 없지만 생성자 주입은 final를 선언함으로써 객체가 변하지 않도록 방지해준다.
단일 책임 원칙 위반 확인
Lombok을 사용하지 않았을때 필드 주입을 하게 되면 코드량이 상당히 많아지고 생성자를 확인하여 얼마나 많은 요소들을 사용하지는 한눈에 파악이 가능하다.
'IT > Java' 카테고리의 다른 글
Arrays.asList() (0) | 2020.07.28 |
---|---|
Thread Safe (0) | 2020.07.08 |
정규식 추출 (0) | 2020.03.17 |
이펙티브 자바 8장 - 메서드 (0) | 2020.01.06 |
이펙티브 자바 - 7장 람다와 스트림 (0) | 2020.01.03 |
댓글