[ 스프링 ] 의존성 주입 방법 ?

2021. 12. 2. 11:49·개발중/Spring Boot
728x90
반응형

스프링 의존성 주입 하는 방법


🔵 어노테이션

의존성을 연결하는 데는 스프링에서 제공하는 @Autowired, @Required 두 어노테이션을 사용할 수 있다.

 

@Autowired

>> 생성자와, 메소드, 필드에 적용할 수 있다.
@Required

>> 새터 메소드에 적용할 수 있다.

🔵 의존성 주입하는 방법 세가지

 

  1. 생성자 기반의 주입
  2. 세터 기반 / 메소드 기반의 주입
  3. 필드 기반의 주입

🔵 생성자 기반의 주입

 

이 방법은 이름에서 알 수 있듯이 이 유형의 주입은 생성자를 통해 수행된다.

 

@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 Boot' 카테고리의 다른 글

[ 스프링 ] 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
'개발중/Spring Boot' 카테고리의 다른 글
  • [ 스프링 ] DispatcherServlet ?
  • [ 스프링 ] Java EE Servlet ?
  • 스프링 대용량 엑셀 (excel) 업로드
  • PathVariable 으로 id 값을 넘길 때
Binsoo
Binsoo
내 트러블 슈팅
  • Binsoo
    정수빈 기술블로그임.
    Binsoo
  • 전체
    오늘
    어제
    • 빈수 개발자 개발 일기 (932)
      • 개발중 (634)
        • Spring Boot (95)
        • Spring Security (2)
        • Spring Batch (6)
        • Spring Boot & Redis (13)
        • Java Persistence API (JPA) (28)
        • Web (42)
        • Rest Api (7)
        • Spring Concurrency Control (3)
        • Redis (8)
        • Kubernetes (k8s) (4)
        • MYSQL (35)
        • AirFlow (15)
        • Docker (2)
        • Git (22)
        • Linux (9)
        • JSON Web Tokens (JWT) (4)
        • Troubleshooting (87)
        • Swagger (0)
        • Vue.js (52)
        • Java (74)
        • html (12)
        • C (5)
        • jQuery (15)
        • JavaServer Pages (JSP) (17)
        • Arduino (1)
        • JavaScript (35)
        • Amazon Web Services (AWS) (11)
        • Algorithm (9)
        • 참고 기능 (18)
        • mongo (2)
      • PROJECT (27)
        • 스프링부트+JPA+몽고 API 개발 (3)
        • MINI (2)
        • 게시판 (3)
        • vue 프로젝트 (1)
        • JPA 사이드 프로젝트 기록 (17)
      • TEAM STUDY (156)
        • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (8)
        • 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (12)
        • NAVER DEVELOPER (4)
        • LINUX (23)
        • PYTHON (19)
        • SERVER (8)
        • 알고리즘 코딩 테스트 스터디 (31)
        • 쿠버네티스 (40)
        • 대세는 쿠버네티스 [초급~중급] (11)
      • BOOK (0)
      • 자격증 (61)
        • 리눅스 1급 - 필기 기록 (19)
        • 네트워크 관리사 (2)
        • 네트워크 관리사 2급 - 실기 기록 (21)
        • 네트워크 관리사 2급 - 필기 기록 (16)
        • 정보처리 (2)
      • 직장인 대학원 (17)
        • 기록 (1)
        • 캐글 스터디 (3)
        • R (12)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    네트워크 관리사 2급 실기
    파이썬
    Git 저장소
    네트워크 관리사 실기
    jpa
    리눅스 마스터 1급 요약
    네트워크 관리사
    리눅스 마스터 1급
    리눅스 1급 요약
    리눅스 마스터
    VUE
    git
    java
    리눅스 마스터 요약
    쿠버네티스
    네트워크 관리사 자격증
    BackendDevelopment
    파이썬 알고리즘
    네트워크 관리사 요약
    Spring
    리눅스 마스터 1급 정리
    알고리즘
    docker
    네트워크 관리사 2급
    스프링
    REST API
    쿠버네티스 스터디
    네트워크 관리사 학점
    springboot
    redis
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Binsoo
[ 스프링 ] 의존성 주입 방법 ?
상단으로

티스토리툴바