의존관계 주입은 크게 4가지 방법이 있다.
@Component
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository;
@Autowired // 생성자 의존관계 주입
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
사실 생성자 주입과 다른 방식의 의존관계 주입과는 다른점이 있다. 생성자 주입은 컨테이너에 등록하는 과정과 의존관계 주입이 동시에 일어나지만 다른 방식의 의존관계 주입은 컨테이너에 등록하는 행위와 의존관계를 주입하는 행위가 나누어져 있다.
생성자 주입은 스프링이 Class를 스프링 컨테이너에 등록하면서 스프링이 아무리 마술사처럼 멋진 기능을 수행한다 하여도 어쨌든간에 스프링도 자바를 기반으로 하기에 자바 문법상 자동으로 생성자를 호출해야 함으로 이때 @Autowired Annotation이 있으면 Parameter에 해당하는 데이터 타입의 빈이 존재한다면 꺼내서 주입시키고 존재하지 않는다면 해당 데이터 타입의 Class를 찾아서 컨테이너에 등록후 의존관계를 주입한다.
@Component
public class MemberServiceImpl implements MemberService {
private MemberRepository memberRepository;
@Autowired
public void setMemberRepository(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
public class MemberServiceImpl implements MemberService {
@Autowired private final MemberRepository memberRepository;
}
@Component
public class MemberServiceImpl implements MemberService {
private MemberRepository memberRepository;
@Autowired
public void injectionInit(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}