본문 바로가기
Spring

[Spring] DI 컨테이너

by 기록하는_사람 2022. 11. 2.

의존성

📌 의존성

① 클래스 의존(구현 의존)

② 인터페이스 의존

 

DI 컨테이너

📌 의존성 주입(Dependency Injection)

: 의존하는 부분을 외부에서 주입하는 것.

  의존하는 부분 : '사용하는 객체' 클래스에 '사용되는 객체' 클래스가 작성된 상태.

  외부로부터 주입 : '사용하는 객체' 클래스 밖에서 '사용되는 객체' 인스턴스를 주입하는 것.

 

📌 임의로 구현한 클래스를 인스턴스로 만들어주는 기능 제공. 

 

DI 컨테이너 규칙

📌 규칙

① 인터페이스를 이용해 의존성 만듦.

② 인스턴스를 명시적으로 생성하지 않음.

③ 어노테이션을 클래스에 부여함.

④ 스프링 프레임워크에서 인스턴스를 생성함.

⑤ 인스턴스를 이용하고 싶은 곳에 어노테이션을 부여함.

 

DI 컨테이너 규칙 - 규칙 1

📌 규칙1. 인터페이스를 이용해 의존성 만듦.

→ 의존하는 부분에 인터페이스를 이용함을 의미.

 

DI 컨테이너 규칙 - 규칙 2

📌 규칙2. 인스턴스를 명시적으로 생성하지 않음.

→ 인스턴스 생성에 new 키워드 사용하지 않음을 의미. 

 

DI 컨테이너 규칙 - 규칙 3, 4

📌 규칙3. 어노테이션을 클래스에 부여함.

      규칙4. 스프링 프레임워크에서 인스턴스를 생성함.

→ 인스턴스를 생성하려는 클래스에 인스턴스 생성 어노테이션 부여함을 의미.

 

💡 스프링 프레임 워크 실행 과정

① 컴포넌트 스캔(Component Scan) : 시작할 때 대상 프로젝트의 모든 패키지를 스캔하는 것. 

② 인스턴스 생성 어노테이션이 부여된 클래스 추출.

③ 추출한 클래스의 인스턴스 생성.

 

💡 인스턴스 생성 어노테이션

어노테이션 개요
@Controller 인스턴스 생성 지시.
스프링 MVC 이용할 때 컨트롤러에 부여.
@Service 인스턴스 생성 지시.
트랜잭션 경계가 되는 도메인(서비스) 기능에 부여.
@Repository 인스턴스 생성 지시.
데이터베이스 액세스(리포지토리) 기능에 부여.
@Component 위 용도 이외의 클래스에 부여.

 

DI 컨테이너 규칙 - 규칙 5

📌 규칙5. 인스턴스를 이용하고 싶은 곳에 어노테이션을 부여함.

→ 스프링 프레임워크에 의해 생성된 인스턴스를 이용하는 클래스에

    참조를 받는 필드를 선언하고, 필드에 @Autowired 어노테이션을 부여함. 

 

DI 프로그램 만들기

https://codingrecord2209.tistory.com/283

 

[Spring] DI 프로그램 만들기

DI 프로그램 만들기 📌 프로젝트 생성 ① 아래 사이트 접속. https://start.spring.io/ ② ADD ... 클릭 후 Sprint Boot Dev Tools 선택. ③ 아래와 같이 선택 후 GENERATE 클릭. ④ 다운로드한 파일 'DependencyInjectionSa

codingrecord2209.tistory.com

 

댓글