2009-04-18 4 views
2

나는 D.I.의 거대한 팬이다.
현재 저는 D.I.을 사용하는 아주 작은 프로젝트를 개발 중입니다. 도처에
(고전적이고 아름다운 D.I. 손으로). 다음과 같은 장점이 내 관점에서Java : 외 국산 오브젝트에 대한 의존성 삽입?

있습니다

  • 그것은 당신이 그것에 익숙해 직관적,
  • 가 부정적으로 가독성에 영향을 미치지 않는 것 (사실 , 그것은 더 나아진다),
  • 그러나 가장 중요한 것은 : 내가 원할 경우 시험 부품 또는 전체 프로젝트 일부 인터페이스의 구현이 다르면 복잡한 리팩토링 또는 이름 바꾸기 또는 다른 해결 방법을 사용하는 대신 몇 자의 문자를으로 변경하면됩니다.

하지만 슬프게도, 나는 어떻게 알아낼 수 없습니까? D.I. 외국에서 만든 객체를 우아한 방법으로 사용할 수 있습니다 (일부 프레임 워크가 없으면 손으로 D.I.을 기억하십시오).

D.I. 손으로 의미 : 뭔가를 C - 토르에 전달하십시오. 글로벌 공장이나 유사품이 없습니다. 금지되어 있습니다!

예를 들어 JAXB는 자체적으로 개체를 만듭니다. 은 JAXBContext에게 "다음 매개 변수를 사용하여 개체를 생성하십시오."라고 말할 방법이 없습니다. JAXB는 매개 변수없는 c-tors 만 허용합니다.

아이디어가 있으십니까?

답변

0

사람들은 이것을 위해 getter injection을 사용하는 것으로 알려져 있습니다. luddite DI 환경에서이 작업을 수행하는 방법을 알지 못합니다.

2

JAXBContext에서 factory method을 사용하지 않습니까? 생성자처럼 매개 변수를 전달할 수 있습니다. 만약 당신이 원하는 것을하지 않는다면, 객체를 생성 한 후에 전통적인 setter injection (즉, context.setXyz(xyzInstance) 메서드 호출)은 자동적으로 스프링을 자동으로 에뮬레이션 할 것입니다 ...

+0

+1 나는 제안 된 것들 중 하나와 함께 갈 것이다. @ivan 당신이 아직도 그것을 부르는 코드의 라인에 익숙하지 않다면 그것을 감싸고 그 코드를 다른 곳으로 옮기십시오. 그것의 제한과 당신은 어느 시점에서 그것을 처리해야합니다. 나는 또한 자바가 허용할지 모르지만 .net에서는 이미 인스턴스화 된 객체의 생성자를 리플렉션을 통해 호출 할 수있다. – eglasius

3

"DI by hand"는 왜 의미가 있습니까? "무언가를 경찰에게 건네 라"?

이 작업을 수행 할 수 있습니까?

ThingOne one = new ThingOne(); 
one.setInjectedItem(a); 
one.setOtherInjectedItem(b); 

봄 의존성 주입의 경우 이것은 속성을 통한 주입 일 수 있으며 "손으로"수행 할 수없는 이유는 알 수 없습니다.

관련 문제