생성자에 @Autowired를 하면 스프링 컨테이너에 @Component로 등록된 빈에서 생성자에 필요한 빈들을 주입
특징
@Component
public class AServiceImpl implements AService {
private final ARepository aRepository;
private final AInfo aInfo;
@Autowired // 생략 가능
public OrderServiceImpl(ARepository aRepository, aInfo AInfo) {
this.aRepository = aRepository;
this.aInfo = aInfo;
}
}
필드의 값을 변경하는 수정자 메서드(set필드명 메서드)를 통해서 의존 관계를 주입하는 방법
특징
@Component
public class AServiceImpl implements AService {
private final ARepository aRepository;
private final AInfo aInfo;
@Autowired
public void setARepository(ARepository aRepository){
this.aRepository = aRepository;
}
@Autowired
public void setAInfo(AInfo aInfo){
this.aInfo = aInfo;
}
}
@Component
public class AServiceImpl implements AService {
@Autowired
private final ARepository aRepository;
@Autowired
private final AInfo aInfo;
}
불변성
누락 방지
field 값 final 키워드 사용 가능
순환 참조 방지
주입할 스프링 빈이 없을 때
자동 주입 대상 옵션 처리 방법
@Autowired(required = false)
public void setNoBean1(User noBean1) {
System.out.println("noBean1 = " + noBean1);
}
@Autowired
public void setNoBean2(@Nullable User noBean2) {
System.out.println("noBean2 = " + noBean2);
}
@Autowired
public void setNoBean3(Optional<User> noBean3) {
System.out.println("noBean3 = " + noBean3);
}