[Spring] 의존성 주입 어노테이션

EB·2021년 5월 30일
0

📌 의존성 주입 어노테이션

XML에서 빈을 설정후 애플리케이션이 실행될 때 빈을 주입해서 사용하면 XML파일 사용 및 관리가 불편하다는 단점이 있다.

스프링에서는 @AutoWired를 사용하여 개발자가 만든 클래스들의 빈을 직접 자바코드에서 생성하여 사용한다.

@AutoWired

:주로 변수 위에 설정하여 해당 객체를 찾아 자동으로 할당한다.

1) 기존 XML 파일에서 각각의 빈을 DI로 주입했던 기능을 코드에서 애너테이션으로 자동으로 수행

2) 별도의 setter나 생성자 없이 속성에 빈 주입 가능

@AutoWired의 required 속성

:프로퍼티에 대해 @AutoWired를 선언하면 해당 프로퍼티는 기본으로 필수 입력 항목이 된다.

만약 프로퍼티에 주입할 의존 객체를 찾을 수 없다면 예외가 발생된다.

required 속성을 false로 설정하면 프로퍼티에 주입할 의존 객체를 찾지 못하더라도 예외가 발생하지 않는다.

@Qualifier

: 특정 객체의 이름을 이용하여 의존성 주입할 때 사용
@AutoWired는 프로퍼티에 주입할 수 있는 의존객체가 여러 개 있을 경우 오류를 발생시킨다.

같은 타입의 객체가 여러 개 있으면 어떤 객체를 주입해야할지 알 수 없기 때문이다.

이 경우 @Qualifier 애너테이션을 사용하면 빈의 이름 또는 아이디로 의존객체를 지정할 수 있다.

@Qualifier@Qualifier를 찾는 용도로만 사용하는게 명확하고 좋다.

단점: 주입 받을 때 모든 코드에 @Qualifier를 붙여주어야한다.

@Qualifier("mainDiscountPolicy")

@Primary

Primary는 우선순위를 정하는 방법이다.
@Autowired 시 여러 빈이 매칭되면 @Primary우선권을 가짐!

@Qualifier 과 @Primary 우선순위

@Qualifier은 기본값 처럼 동작하는 것이고, @Primary는 매우 상세하게 동작한다. 스프링은 자동보단 수동이, 넓은 범위의 선택권보다 좁은 범위의 선택권이 우선 순위가 높다
✅따라서 , @Qualifier가 우선권이 높다!

profile
👩‍💻✨junior developer

0개의 댓글