English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spring 의존성 주입

의존 주입(DI)은 의존성을 제거하여 프로그래밍 코드에서 쉽게 관리하고 테스트할 수 있도록 하는 디자인 패턴입니다. 의존 주입은 우리의 프로그래밍 코드를 느슨하게 결합시킵니다. DI를 더 잘 이해하기 위해 먼저 의존 관계 검색(DL)을 이해해야 합니다:

의존 관계 검색

의존 관계 검색은 필요 이후에 자원을 얻는 방법입니다. 예를 들어, 여러 가지 자원 얻는 방법이 있을 수 있습니다:

A obj = new AImpl();

이렇게 하면, 우리는 new 키워드를 사용하여 직접 자원(A 클래스의 인스턴스)을 얻을 수 있습니다. 또한, 팩토리 메서드를 사용할 수 있습니다:

A obj = A.getA();

이렇게 하면, 우리는 스태틱 팩토리 메서드 getA()를 호출하여 자원(A 클래스의 인스턴스)을 얻습니다.

또는, 우리는 JNDI(Java 명명 디렉토리 인터페이스)를 통해 자원을 얻을 수 있습니다. :

Context ctx = new InitialContext();
Context environmentCtx = (Context) ctx.lookup("java:comp"/env);
A obj = (A) environmentCtx.lookup("A");

자원을 얻기 위해 여러 가지 방법이 있을 수 있습니다. 이 방법의 문제를 살펴보겠습니다.

의존 관계 검색 문제

의존 관계 검색 문제가 주로 두 가지가 있습니다.

긴밀하게 결합됨: 의존 관계 검색 방법은 코드가 긴밀하게 결합되도록 합니다. 자원을 변경하면 코드에 많은 수정이 필요합니다. 테스트가 어렵습니다: 이 방법은 테스트 애플리케이션을 테스트할 때 많은 문제를 발생시킬 수 있습니다. 특히 블랙박스 테스트에서 그렇습니다.

의존성 주입

의존성 주입은 프로그램을 제거하는 디자인 패턴입니다. 이 경우, 외부 소스(예: XML 파일)에서 정보를 제공합니다. 이는 코드를 약한 결합으로 만들고 테스트하기 쉽게 합니다. 이 경우, 코드를 다음과 같이 작성합니다:

class Employee{
Address address;
Employee(Address address){
this.address = address;
}
public void setAddress(Address address){
this.address = address;
}
}

이 경우, Address 클래스의 인스턴스는 외부 소스(예: XML 파일)에서 생성자나 setter 메서드를 통해 제공됩니다.

Spring 프레임워크에서 의존성 주입을 수행하는 두 가지 방법

Spring 프레임워크는 의존성을 주입하는 두 가지 방법을 제공합니다

생성자를 통해 setter 메서드를 통해