XML에서 빈을 설정후 애플리케이션이 실행될 때 빈을 주입해서 사용하면 XML파일 사용 및 관리가 불편하다는 단점이 있다.
스프링에서는 @AutoWired
를 사용하여 개발자가 만든 클래스들의 빈을 직접 자바코드에서 생성하여 사용한다.
:주로 변수 위에 설정하여 해당 객체를 찾아 자동으로 할당한다.
1) 기존 XML 파일에서 각각의 빈을 DI로 주입했던 기능을 코드에서 애너테이션으로 자동으로 수행
2) 별도의 setter나 생성자 없이 속성에 빈 주입 가능
required
속성:프로퍼티에 대해 @AutoWired를 선언하면 해당 프로퍼티는 기본으로 필수 입력 항목이 된다.
만약 프로퍼티에 주입할 의존 객체를 찾을 수 없다면 예외가 발생된다.
required 속성을 false로 설정하면 프로퍼티에 주입할 의존 객체를 찾지 못하더라도 예외가 발생하지 않는다.
: 특정 객체의 이름을 이용하여 의존성 주입할 때 사용
@AutoWired는 프로퍼티에 주입할 수 있는 의존객체가 여러 개 있을 경우 오류를 발생시킨다.
같은 타입의 객체가 여러 개 있으면 어떤 객체를 주입해야할지 알 수 없기 때문이다.
이 경우 @Qualifier 애너테이션을 사용하면 빈의 이름 또는 아이디로 의존객체를 지정할 수 있다.
@Qualifier
은 @Qualifier
를 찾는 용도로만 사용하는게 명확하고 좋다.
@Qualifier("mainDiscountPolicy")
Primary
는 우선순위를 정하는 방법이다.
@Autowired
시 여러 빈이 매칭되면 @Primary
가 우선권을 가짐!
@Qualifier
은 기본값 처럼 동작하는 것이고, @Primary
는 매우 상세하게 동작한다. 스프링은 자동보단 수동이, 넓은 범위의 선택권보다 좁은 범위의 선택권이 우선 순위가 높다
✅따라서 , @Qualifier
가 우선권이 높다!