의존관계 주입
@Autowired
생략 가능)의존관계 자동 주입은 스프링 컨테이너가 관리하는 스프링 빈이어야 동작한다. 스프링 빈이 아닌 클래스에서 @Autowired
코드를 적용해도 아무 기능도 동작하지 않는다.
생성자 주입을 사용 !
최근에는 생성자를 1개만 두고, @Autowired
를 생략하는 방법을 주로 사용
@RequiredArgsConstructor
를 함께 사용하면 기능은 다 제공하면서, 코드는 깔끔하게 사용할 수 있다.ingframework.stereotype.Component;
@Component
@RequiredArgsConstructor // 생성자
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
}
자동 주입 대상을 옵션으로 처리하는 방법
@Autowired(required = false)
: 자동 주입 대상이 없으면 메서드 호출 x@Nullable
: 자동 주입 대상이 없으면 nullOptional<>
: 자동 주입 대상이 없으면 Optional.emptypublic class AutoWiredTest {
@Test
void AutowiredOption(){
ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.class);
}
static class TestBean{
@Autowired(required = false)
public void setNoBean1(Member noBean1){
System.out.println("noBean1 = " + noBean1);
}
@Autowired
public void setNoBean2(@Nullable Member noBean2){
System.out.println("noBean2 = " + noBean2);
}
@Autowired
public void setNoBean3(Optional<Member> noBean3){
System.out.println("noBean3 = " + noBean3);
}
}
}
/* 출력 결과 (noBean1은 member가 스프링 빈이 아니므로 메서드 호출이 안됨)
noBean2 = null
noBean3 = Optional.empty
*/