본문 바로가기
Spring/boot

spring boot Service 코드 repository injection관련

by 코딩균 2021. 12. 27.

spring에서는 Entity, Service, Repository등을 컴포넌트로 중앙에서 생성/관리하고 있다. 

service 단으로 repository를 주입하는 방법은 아래와 같다

 

필드 인젝션

@Repository
@Transactional(readOnly = true)
public class MemeberService{

	
    @Autowired
    private final MemberRepository memberRepository;
 
 	...
 }
  • spring에서 생성한 memberRepositry를 해당 필드에 자동으로 주입해준다
  • 중간에 repository를 다른 것으로 변경하기 어렵다

 

 

Setter 인젝션

@Service
@Transactional(readOnly = true)
class MemberService{
	
    
    private final MemberRepository memberRepository;
    
    @Autowired
    public void setMemberRepository(MemberRepository memberRepository){
    	this.memberRepository = memberRepository;
    }
    
    ...
    
}
  • setter를 통해 어플리케이션 동작 중간에  repository를 변경해줄 수 있다
  • test code 작성 시에 mock을 주입하여 service를 다른 혹은 테스트 repository기반으로 테스트해볼 수 있다

 

 

Constructor 인젝션

@Serivce
@Transactional(readOnly = true)
public class MemberService{
	
    private final MemeberRepository memberRepository;
    
    @Autowired
    public MemberService(MemeberRepository memeberRepository){ this.memberRepositry = memberRepository; }
    
    ...
    
 }
  • 어플리케이션 동작 중에 repository를 바꾸는 경우는 적기 때문에 스프링이 시작될 때, 생성자를 통해 인젝션
  • 생성자를 통해 인젝션시에, test mock도 생성자를 통해 인젝션 가능