Loading…

의존성 주입 예제

당신의 좋은 기사주셔서 감사합니다하지만 소비자 클래스는 1 종속성 (메시징 서비스 인터페이스)가 있습니다. 소비자 클래스에 여러 종속성 또는 생성자 매개 변수가 있는 경우 어떻게 해야 합니다??? 따라서 종속성 주입 구현은 하드 코딩된 종속성으로 문제를 해결하고 응용 프로그램을 유연하고 쉽게 확장할 수 있도록 하는 데 도움이 되었습니다. 이제 인젝터 및 서비스 클래스를 조롱하여 응용 프로그램 클래스를 얼마나 쉽게 테스트 할 수 있는지 살펴보겠습니다. JSR330에 따르면 사출은 다음과 같은 순서로 수행됩니다: 속성 주입: 속성 주입(세터 주입이라고도 함)에서 인젝터는 클라이언트 클래스의 공용 속성을 통해 종속성을 제공합니다. 클라이언트는 종속성의 특정 구현에 대한 구체적인 지식이 없어야 합니다. 인터페이스의 이름과 API만 알고 있어야 합니다. 따라서 클라이언트는 인터페이스 뒤에 있는 것이 변경되더라도 변경할 필요가 없습니다. 그러나 인터페이스가 클래스에서 인터페이스 유형(또는 그 반대)으로 리팩터링된 경우 클라이언트를 다시 컴파일해야 합니다. [12] 클라이언트와 서비스가 별도로 게시되는 경우 이는 중요합니다. 이 불행한 커플링은 종속성 주입이 해결할 수 없는 커플링입니다. 원칙에 따르면, 반원들은 그 책임을 완수하는 데 필요한 물건을 만드는 것이 아니라 그 책임을 완수하는 데 집중해야 한다. 그리고 종속성 주입이 재생되는 곳이다 : 그것은 필요한 개체와 클래스를 제공합니다.

종속성을 구성 파일에 외부화해도 이 사실은 변경되지 않습니다. 이 현실을 좋은 디자인의 일부로 만드는 것은 서비스 로케이터가 코드 베이스 전체에 분산되지 않는다는 것입니다. 응용 프로그램당 한 곳에 만두됩니다. 이렇게 하면 나머지 코드 베이스가 종속성 주입을 사용하여 깨끗한 클라이언트를 만들 수 있습니다. 인터페이스 주입에 값이 있는 경우 종속성은 단순히 자체에 대한 참조를 전달하는 것 외에도 무언가를 수행해야 합니다. 이는 다른 종속성을 해결하기 위해 팩터리 또는 하위 어셈블러역할을 할 수 있으므로 주 어셈블러에서 일부 세부 정보를 추상화할 수 있습니다. 종속성이 얼마나 많은 클라이언트가 사용 중인지 알 수 있도록 참조 카운트일 수 있습니다. 종속성이 클라이언트 컬렉션을 유지 관리하는 경우 나중에 다른 인스턴스 자체로 모두 삽입할 수 있습니다. 순수 객체 지향 언어가 막다른 언어인 이유를 이해하려면 종속성 주입에 대한 설명을 읽는 것이 필요합니다. 개체 지향은 유용한 기술입니다 – 그것은 성공적인 방법론이 아닙니다.

위의 예에서 SomeClass는 greeter 종속성을 만들거나 찾는 데 관심이 없으며 인스턴스화 될 때 단순히 greeter를 전달합니다. 이제 서비스 및 소비자 클래스를 초기화하는 java 종속성 인젝터 클래스를 작성할 준비가 되었습니다. Java 클래스는 이 클래스의 인스턴스를 사용하는 경우 다른 클래스에 대한 종속성을 가집니다. 이를 _class 종속성이라고 합니다. 예를 들어 로거 서비스에 액세스하는 클래스는 이 서비스 클래스에 대한 종속성을 가집니다. 위에서 보았듯이 인젝터 클래스는 클라이언트(종속)에 서비스(종속성)를 삽입합니다. 인젝터 클래스는 생성자, 속성 또는 메서드를 통해 세 가지 방법으로 종속성을 광범위하게 삽입합니다.