@RequriedArgsConstructor
의존성 주입의 종류로는 Constructor
, Setter
, Field
타입이 있다.
1. Constructor(생성자)
@Service
public class MemberListPrinter {
private MemberDao memberDao;
private MemberPrinter printer;
@Autowired
public MemberListPrinter(MemberDao memberDao, MemberPrinter printer){
this.memberDao = memberDao;
this.printer = printer;
}
}
2. Setter
public class MemberListPrinter {
private MemberDao memberDao;
private MemberPrinter printer;
public MemberListPrinter() {
}
public MemberListPrinter(MemberDao memberDao, MemberPrinter printer) {
this.memberDao = memberDao;
this.printer = printer;
}
@Autowired
public void setMemberDao(MemberDao memberDao) {
this.memberDao = memberDao;
}
@Autowired
public void setMemberPrinter(MemberSummaryPrinter printer) {
this.printer = printer;
}
}
3. Field
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Autowired를 이용한 의존성 주입을 필드 주입이라고 한다. 그러나 필드 주입은 스프링 팀에서 권장하는 방식은 아니라고 한다.
@RequriedArgsConstructor 를 통한 생성자 주입
생성자주입의 단점은 위의 Constructor(생성자) 코드처럼 생성자를 만들기 번거롭다는 것이다. 하지만 이를 보완하기위해 @RequriedArgsConstructor
을 사용하여 간단한 방법으로 생성자 주입 방식의 코딩을 할 수 있다.
@RequriedArgsConstructor
@Service
public class MemberListPrinter {
private final MemberDao memberDao;
private final MemberPrinter printer;
}
@RequriedArgsConstructor
: final이 붙거나 @NotNull 이 붙은 필드의 생성자를 자동 생성해주는 롬복 어노테이션
생성자 주입의 장점
- 순환 참조 방지
- 테스트 코드 작성 용이
- 코드 악취 제거
- 객체 변이 방지 (final 가능)
'Spring' 카테고리의 다른 글
JWT(Json Web Token)를 이용한 로그인 인증에 대하여 (0) | 2023.04.05 |
---|---|
[Spring] 서블릿, JSP, MVC 패턴 (0) | 2022.07.28 |
[Spring] 서블릿(Servlet) 이란? (0) | 2022.07.28 |
[Spring] 스프링 AOP 개념, 용어 정리 (0) | 2022.07.28 |
[Spring] @Qualifier 어노테이션 (0) | 2022.07.28 |
댓글