2010-11-21 18 views
0

Hallo Wenn Klasse A durch Feder instanziiert wird. In Klasse A bin ich ein anderes Objekt der Klasse B instantiieren (regelmäßige Intantiation mit neuen Operator) Kann ich die Abhängigkeiten der Klasse B instanziieren, nur aus der Klasse A ??Instantiierungsabhängigkeiten im Frühjahr

Gibt es eine Möglichkeit, die Abhängigkeit ob Klasse B direkt zu injizieren, während die Klasse A ??

ist es so etwas wie: (dependecy Attribut ist nur ein Beispiel)

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

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

Dank im Voraus.

Ich möchte vermeiden, eine andere Eigenschaft (oder Konstruktor) für verschachtelten Aufruf an Klasse B setzen, da ich den vorhandenen Code nicht ändern möchte.

+0

Bitte, formatieren Sie Ihren Java-Code als Code (01010101 Taste). Und füge ein paar Zeilenumbrüche hinzu ;-) –

Antwort

1

Sie sollten Spring alle Instanziierung und Injektion behandeln lassen. Dies bedeutet, dass Sie classB-classA injizieren sollen:

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

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

Und Ihre new B() loszuwerden:

class A { 
    Xdao xDao; 
    B bvar; 
} 

class B { 
    Ydao yDao; 
} 
+0

Danke Neeme. Ich schaue gerade in Frühlingsdokumente ich sehe, dass es abhängig von Attribut ist. Kann ich das benutzen? Wie erwähnt, möchte ich den bestehenden Code, der noch keine Spring-Injektion verwendet, aber einen neuen Operator verwenden, nicht ändern. Tks. – bob

+0

Der Frühling hat das Attribut "Abhängig von", aber er wird für andere Zwecke verwendet. Wenn Sie einen IoC-Container (zB Spring) verwenden möchten, müssen Sie das Recht aufgeben, neue Objekte "von Hand" zu konstruieren. Ich nehme an, Sie haben keine andere Wahl, als den bestehenden Code zu ändern. Oder mach verrückte Bytecode-Manipulation zur Ladezeit der Klasse, aber das kann als "schwarze Magie" betrachtet werden. –

+0

Tks. Dies löst meine Frage. – bob

0

Sobald Sie "neu" aufrufen, befindet sich dieses Objekt nicht unter der Kontrolle von Spring.

Inject oder rufen Sie "neu" - es ist das eine oder andere.