728x90
반응형
스프링 의존성 주입 하는 방법
🔵 어노테이션
의존성을 연결하는 데는 스프링에서 제공하는 @Autowired, @Required 두 어노테이션을 사용할 수 있다.
@Autowired
>> 생성자와, 메소드, 필드에 적용할 수 있다.
@Required
>> 새터 메소드에 적용할 수 있다.
🔵 의존성 주입하는 방법 세가지
- 생성자 기반의 주입
- 세터 기반 / 메소드 기반의 주입
- 필드 기반의 주입
🔵 생성자 기반의 주입
이 방법은 이름에서 알 수 있듯이 이 유형의 주입은 생성자를 통해 수행된다.
@Autowired
public BinsooService( BinsooRepository binsooRepository ){
this.binsooRepository = binsooRepository
}
🔵 세터 기반 / 메소드 기반의 주입
이 방법은 메소드를 선언하고 ( 일반적으로는 세터 메소드에 이용 ) @Autowired 또는 @Required 어노테이션을 적용하는 것이다.
세터 메소드의 주입
public class BinsooService(){
@Required
public void setBinsooRepository( BinsooRepository binsooRepository ){
this.binsooRepository = binsooRepository
}
}
다른 이름 메소드의 주입
public class BinsooService(){
@Autowired
public void binsooSetSetSet( BinsooRepository binsooRepository ){
this.binsooRepository = binsooRepository
}
}
🔵 필드 기반의 주입
이 방법은 @Autowired 어노테이션으로 필드에 직접 적용할 수 있다.
이 방법을 활용하면 세터 메소드를 선언할 필요가 없다.
@Autowired
private BinsooRepository binsooRepository;
🔴 의존성 주입 모범 사례
- 반드시 필요한 의존성
- 반드시 필요한 의존성에 있어서는 항상 생성자를 통해서 주입해야 한다. 이를 통해 생성 이후에 인스턴스는 완전히 초기화 되고 주입된 의존성은 읽기 전용이 된다. ( read only )
- 필수가 아닌 선택적인 의존성
- 필수가 아닌 선택적인 의존성은 세터 / 메소드를 통해 주입할 수 있다.
- 피해야 하는 의존성
- 필드 기반의 주입은 사용하지 말아야 한다. 스프링은 자바 리플랙션 ( Reflection ) 으로 필드를 주입하고, 필드 주입 방식을 사용하는 것은 위험한 것으로 간주 된다.
- 피해야 하는 이유
- 의존성을 초기화 하고 관리하는 방법과 이들의 의존 관계와 같은 의존성의 정보를 숨긴다.
- 필드 주입은 매우 간단하다. 필드를 정의하고 @Autowired 또는 @Resource 어노테이션을 적용만 하면 된다. 개발자가 이 방법에 중독되어 너무 많은 의존성을 추가하면 단일 책임 원칙 ( SRP ) 를 위반 할 수 있다.
728x90
반응형
'개발중 > Spring' 카테고리의 다른 글
[ 스프링 ] DispatcherServlet ? (0) | 2021.12.03 |
---|---|
[ 스프링 ] Java EE Servlet ? (0) | 2021.12.02 |
스프링 대용량 엑셀 (excel) 업로드 (0) | 2021.11.08 |
PathVariable 으로 id 값을 넘길 때 (0) | 2021.10.24 |
@ResponseBody 어노테이션의 post 와 put 의 차이 (0) | 2021.10.04 |