스프링 빈 없이도 동작해야할때가있다
@Atutowired만 사용하면 required의 옵션 기본값이 false가 아니라면 오류가 발생한다.
그러니까 만약
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
이렇게 생성자로 의존성 주입을 해주는데 만약에 주입대상이 없으면 오류가 발생하게된다. 이것을 방지 하기위한것이 @Atutowired(required = false)로 없다면 메서드자체가 호출되지 않는다.
@Autowired(required = false)
public void setNoBean1(Member noBean1){
System.out.println("noBean1" + noBean1);
}
@Autowired
public void setNoBean2(Member noBean2){
System.out.println("noBean1" + noBean2);
}
@Autowired
public void setNoBean3(Optional<Member> noBean3){
System.out.println("noBean1" + noBean3);
}
이렇게 3가지 방법이있는데
IDE가 인식못할수도있으니 @Autowired이아닌
그냥 생성자 주입으로 하자