개발/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
반응형