개인적으로 어려웠던 스프링의 원리과 사용기술을 학습하기 위하여 작성한 글입니다. 많은 내용을 참고하여 내용을 정리하였습니다. 수정사항이 있다면 언제든 지적해주세요!!
@Autowired
는 생략이 가능하다. 스프링 빈으로 등록되어 있다면 생성자를 통해서 자동으로 의존관계를 주입시켜 준다.@Autowired
의 기본 동작은 주입할 대상이 없으면 오류가 발생한다. 주입할 대상이 없어도 동작하게 하려면 @Autowired(required = false)
로 지정하면 된다.@Configuration
같은 곳에서만 특별한 용도로 사용한다.@Component
public class OrderServiceImpl implements OrderService {
@Autowired
private MemberRepository memberRepository;
@Autowired
private DiscountPolicy discountPolicy;
}
- 수정자 주입(setter 주입)과 매우 유사한 형태를 보인다.
@Autowired
는 자동으로 주입할 대상이 없으면 오류가 발생한다. 만약 스프링 빈이 없이도 동작하게 만들어야 하는 경우 선택할 수 있는 옵션을 살펴보자.null
이 입력된다.Optional.empty
가 입력된다.public 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);
}
}
}
setNoBean1
메소드의 @Autowired(required = false)
옵션은 아예 호출을 하지 않는다.@Nullable
스프링 빈이 없을 경우 null 이 입력된다.Optional.empty
가 입력된다.생성자 주입을 사용하면 데이터를 누락 했을 때 컴파일 오류가 발생한다.
final
키워드를 사용할 수 있다. 그래서 생성자에서 혹시라도 값이 설정되지 않는 오류를 컴파일 시점에 막아준다.학습에 도움이 되었던 자료