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
반응형
'개발 > Java|Spring' 카테고리의 다른 글
Spring Security Custom Fiilter 적용(UsernamePasswordAuthenticationFilter를 활용해 모든 권한을 가진 tester 계정 만들기) (0) | 2023.02.07 |
---|---|
인텔리제이(IntelliJ) 코드 실시간 반영(서버 자동 재시작) (0) | 2023.01.19 |
Spring Security Authentication(인증) (0) | 2023.01.18 |
distinct 로 중복 제거 시 속도 저하 문제 (0) | 2023.01.18 |
Spring Security 개념, 아키텍처, 필터 순서, 예제 (0) | 2023.01.17 |