DI 방법들을 알아보기에 앞서 먼저 @Autowired 어노테이션이 무엇인지 알아볼 필요가 있다.
@Autowired는 사용된 위치의 변수 및 메서드에 필요한(의존하는) bean(스프링 빈)의 인스턴스를 IoC container에서 찾아 주입하는 역할을 한다. 쉽게 말해 스프링에서 의존관계 주입(DI)을 할 때 사용되는 어노테이션(Annotation)이다.
주의사항 : @Autowired는 의존 객체의 타입에 해당하는 bean을 찾아 주입한다.
- 그렇기 때문에 해당 타입의 bean이 없는 경우 작동하지 않는다.
- 또한 같은 이름의 bean이 여러 개일 경우도 있다.그럴 때는 @Primary 나 @ Qualifier(bean id) 등을 이용해서 해결할 수 있다.
@Autowired 어노테이션은 기본적으로 생성자 , 메소드 , 필드에서 사용이 가능하다.
👉 DI의 방법도 3가지로 나눌 수 있다.
- 생성자 주입 ( 스프링 4.3부터는 생성자가 1개만 존재하는 경우 생략이 가능하다.)
- 일단 공식문서가 추천하고 밀고있는 방식이다. ( 생략이 가능하게 해준것만 봐도 알 수 있다.)
- 생성자 호출 시점에 1회 호출되는 것을 보장한다. 그렇기 때문에 주입받은 bean인스턴스가 불변해야 하거나 , 반드시 주입이 필요한 경우에 사용하기 좋다.
- Setter 메소드 ( 수정자 주입 )
- 필드값을 변경하는 Setter메소드를 통해 DI를 주입하는 방법이다.
- 주입받는 bean 인스턴스가 변경될 가능성이 있는 경우 사용한다.
- 메소드에 매개변수로 의존관계의 객체(bean들 중에 하나)가 들어가 있어서 만약 해당하는 bean이 존재하지 않으면 에러가 발생한다. 에러를 방지하기 위해서는 @Autowired(required = false) 를 통해 예방할 수 있다.
- 필드 주입
- 변수 선언부에 @Autowired 어노테이션을 붙인다.
- 코드가 간결하다.
- 주입된 bean 인스턴스는 외부에서 접근이 불가능하다는 단점이 있다. = 테스트 코드를 만들때 치명적인 단점이 된다.
- 또한 반드시 DI 프레임워크가 존재해야 함으로 반드시 지양해야 한다.
( 초심자가 혼자 공부할려고 작성한 글입니다. 틀리거나 다른 부분이 많을 테니 지적해주심 부지런히 수정하겠습니다 👍 )
'CS' 카테고리의 다른 글
추상클래스와 인터페이스 (0) | 2023.05.29 |
---|---|
[프로그래밍 패러다임] - 함수형 프로그래밍 (2) | 2023.05.15 |
DTO , VO , Entity의 간단한 정리 및 비교 (0) | 2023.04.16 |
URI 와 URL (0) | 2023.04.14 |
REST API (0) | 2023.04.13 |
DI 방법들을 알아보기에 앞서 먼저 @Autowired 어노테이션이 무엇인지 알아볼 필요가 있다.
@Autowired는 사용된 위치의 변수 및 메서드에 필요한(의존하는) bean(스프링 빈)의 인스턴스를 IoC container에서 찾아 주입하는 역할을 한다. 쉽게 말해 스프링에서 의존관계 주입(DI)을 할 때 사용되는 어노테이션(Annotation)이다.
주의사항 : @Autowired는 의존 객체의 타입에 해당하는 bean을 찾아 주입한다.
- 그렇기 때문에 해당 타입의 bean이 없는 경우 작동하지 않는다.
- 또한 같은 이름의 bean이 여러 개일 경우도 있다.그럴 때는 @Primary 나 @ Qualifier(bean id) 등을 이용해서 해결할 수 있다.
@Autowired 어노테이션은 기본적으로 생성자 , 메소드 , 필드에서 사용이 가능하다.
👉 DI의 방법도 3가지로 나눌 수 있다.
- 생성자 주입 ( 스프링 4.3부터는 생성자가 1개만 존재하는 경우 생략이 가능하다.)
- 일단 공식문서가 추천하고 밀고있는 방식이다. ( 생략이 가능하게 해준것만 봐도 알 수 있다.)
- 생성자 호출 시점에 1회 호출되는 것을 보장한다. 그렇기 때문에 주입받은 bean인스턴스가 불변해야 하거나 , 반드시 주입이 필요한 경우에 사용하기 좋다.
- Setter 메소드 ( 수정자 주입 )
- 필드값을 변경하는 Setter메소드를 통해 DI를 주입하는 방법이다.
- 주입받는 bean 인스턴스가 변경될 가능성이 있는 경우 사용한다.
- 메소드에 매개변수로 의존관계의 객체(bean들 중에 하나)가 들어가 있어서 만약 해당하는 bean이 존재하지 않으면 에러가 발생한다. 에러를 방지하기 위해서는 @Autowired(required = false) 를 통해 예방할 수 있다.
- 필드 주입
- 변수 선언부에 @Autowired 어노테이션을 붙인다.
- 코드가 간결하다.
- 주입된 bean 인스턴스는 외부에서 접근이 불가능하다는 단점이 있다. = 테스트 코드를 만들때 치명적인 단점이 된다.
- 또한 반드시 DI 프레임워크가 존재해야 함으로 반드시 지양해야 한다.
( 초심자가 혼자 공부할려고 작성한 글입니다. 틀리거나 다른 부분이 많을 테니 지적해주심 부지런히 수정하겠습니다 👍 )
'CS' 카테고리의 다른 글
추상클래스와 인터페이스 (0) | 2023.05.29 |
---|---|
[프로그래밍 패러다임] - 함수형 프로그래밍 (2) | 2023.05.15 |
DTO , VO , Entity의 간단한 정리 및 비교 (0) | 2023.04.16 |
URI 와 URL (0) | 2023.04.14 |
REST API (0) | 2023.04.13 |