개발/Java|Spring
스프링 의존성주입 생성자주입(@RequiredArgsconstructor 쓰는 이유)
달리초이
2023. 1. 18. 15:41
1. @Autowired는 변경이 어렵다
@Service
@Transactional(readOnly = true)
public class MemberService {
@Autowired
private MemberRepository memberRepository;
}
2. 그래서 변경을 위해 Setter Injection 사용
하지만 조립한 이후에 바꿀 이유가 없음.
@Service
@Transactional(readOnly = true)
public class MemberService {
private MemberRepository memberRepository;
@Autowired
public void setMemberRepository(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
3. 요샌 생성자 Injection 사용
테스트 케이스 작성할 때 컴파일 시점에서 체크 가능
@Service
@Transactional(readOnly = true)
public class MemberService {
private MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
생성자가 하나만 있는 경우에는 @Autowired 없어도 최신버전 스프링에서 자동으로 인젝션 해줌.
변경할 일이 없기 때문에 final로 변경함. 컴파일 시점에서 체크 가능해짐.
@Service
@Transactional(readOnly = true)
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
lombok 적용하면 @AllArgsConstructor 필드를 이용해 모든 생성자 만들어줌.
하지만 @RequriedArgsConstructor를 사용하면 final 있는 필드만 가지고 생성자를 만들어줌.
728x90
반응형