2010-11-21 4 views
0

안녕 봄에 의해 클래스 A가 인스턴스화되는 경우. 클래스에서 나는 클래스 B (다른 연산자를 사용하여 일반적인 intantiation)의 다른 객체를 인스턴스화하고있다 클래스 B의 종속성을 단지 클래스 A를 억지로부터 인스턴스화 할 수 있습니까 ??봄에 종속성 인스턴스화

class A{ 
    Xdao xDao; 
    B bvar = new B(); 
} 

Class B { 
    Ydao yDao; 
} 

클래스 A를 인스턴스화하는 동안 종속성 ob 클래스 B를 직접 삽입하는 방법이 있습니까 ??

<bean id="classA" dependecy="classB"> 
    <property name="xDao" ref="xDao" /> 
</bean> 

<bean id="classB" > 
    <property name="yDao" ref="xDao" /> 
</bean> 

덕분에 사전에 (실행 종속 속성 그냥 예입니다) : 같은

뭔가가있다.

기존 코드를 변경하지 않으려 고 클래스 B에 대한 중첩 호출을 설정하기 위해 다른 속성 (또는 생성자)을 두지 않으려합니다. .

+0

, 코드와 자바 코드합니다 (01,010,101 버튼)을 포맷하십시오 이것은 당신이 classBclassA에 주입해야한다는 것을 의미한다. 그리고 약간의 linebreaks를 추가하십시오 ;-) –

답변

1

스프링이 모든 인스턴스화 및 주입을 처리하도록해야합니다.

<bean id="classA"> 
    <property name="xDao" ref="xDao" /> 
    <property name="bvar" ref="classB" /> 
</bean> 

<bean id="classB"> 
    <property name="yDao" ref="xDao" /> 
</bean> 

그리고, 당신의 new B() 제거 :

class A { 
    Xdao xDao; 
    B bvar; 
} 

class B { 
    Ydao yDao; 
} 
+0

Thanks Neeme. 나는 스프링 문서를보고 있는데, depends-on 속성이 있다는 것을 알았다. 그걸 사용할 수 있을까요? 언급했듯이 스프링 인젝션을 사용하지 않고 새로운 연산자를 사용하는 기존 코드를 변경하고 싶지는 않습니다. Tks. – bob

+0

스프링은 "depends-on"속성을 가지고 있지만 다른 용도로 사용됩니다. IoC 컨테이너 (예 : Spring)를 사용하려면 "손으로"새 객체를 만들 수있는 권리를 포기해야합니다. 그래서 나는 기존 코드를 변경하는 것 외에 다른 선택의 여지가 없다고 생각합니다. 또는 클래스 로딩 시간에 일부 미친 바이트 코드 조작을 수행 할 수 있지만 "흑 마법"으로 간주 될 수 있습니다. –

+0

Tks. 이것은 내 질문을 해결합니다. – bob

0

"new"라고하는 순간, 그 객체는 Spring의 제어를받지 않습니다.

"새로운"주사하거나 전화하십시오 - 그것 또는 다른 것.

관련 문제