2012-12-10 4 views
0

이것은 (물론 단지 예) 내 코드 의존성 주입없이 건설 객체 의존성은 다소 크다 (수백 가지 유형 일 수 있음). 하드 코딩 (예에서와 같이) 또는 아마 일종의 구성 (XML 또는 아마도 YAML)을 사용할 수 있으며 런타임에 그러한 계층을 만들 수있는 빌더를 사용할 수 있습니다. Spring Framework 외에도 사용할 수있는 솔루션이 있습니까?구성 자바

종속성 삽입을 제공하지 마십시오.

이 스 니펫은 dependency injection 디자인 패턴과 아무 관련이 없습니다. 소비자는 컨테이너에 대한 링크가 없기 때문입니다. 게다가 컨테이너가 전혀 없다 (이는 DI 패턴의 정적 구성 요소이며 OOP 원칙의 잔인한 위반 임). inversion of control은 없습니다.

+0

그런 경우 종속성 주입을 사용합니다. 왜 궁금 해서요? – Subin

+4

왜 DI가 아닌가요? 당신이하는 일은 실제로 의존성 주입입니다. Spring (또는 Guice와 같은 다른 DI 프레임 워크)은 여러분이 요구하는 것을 정확히하고 있습니다. 왜 DI에 no라고 말하고 있는지 조금이라도 말할 수 있다면 좋을 것입니다. (당신은 DI를하고 있고, DI를하기위한 프레임 워크를 찾고 있지만, DI 프레임 워크는 원하지 않습니다. : P는 저에게 이상합니다. –

+1

** 당신이 묘사 한 것은 ** (수동) 의존성 주입입니다! – assylias

답변

0

<T> T getInstance(T Interface)을 제공하는 ObjectFactory을 만들 수 있습니다.

그런 다음 Factory는 전달한 Interface의 구현을 찾고 인스턴스화하여 반환합니다. ObjectFactory은 추가 구현을 검색하도록 인스턴스화 한 객체의 생성자를 고려합니다. 이것은 꽤 반사적이지만 작동합니다. 이미 프로젝트에서 이것을 사용했습니다. 당신의 예에서

당신은

Project project = objectFactory.getInstance(Project.class); 

ObjectFactory가 구현 (DefaultProject)를 찾아 생성자가 EmployeeBudget 필요가 있다고 본다 호출해야합니다. 따라서 DefaultProject을 인스턴스화하기 전에 (DefaultEmployeeDefaultBudget) 구현을 검색하여 인스턴스화합니다. 여기서 재귀를 사용해야합니다.

+0

같은 공장에서 동일한 인터페이스를 여러 개 구현 한 경우 어떻게해야합니까? – yegor256

+0

인터페이스에 어떤 구현을 사용해야하는지 ObjectFactory에 알리는 방법을 추가해야합니다. 이것은'DefaultFactory' 나'ExternalFactory'와 같은 전문화 된 팩토리에서 할 수 있습니다. 이것은'ObjectFactory'를 확장합니다. – Kai

+0

맞아,하지만이 모든 것을 자동화 할 수있는 기존의 오픈 소스 프레임 워크를 찾고있다. – yegor256