2016-10-25 3 views
0

Ich versuche, bestehende ProjektErste Frühling @Autowired und @postconstuct Arbeit

Aktuelle Bohne eine neue Bean einzuführen, ist

package w.x.y.z.pkgA 
@Component 
public class BeanA implements InterfaceA { 

} 

Und ich versuche neue Bean w.x.y.z.pkgB

package w.x.y.z.pkgB 
public class BeanB implements InterfaceB { 

    @Autowired 
    private BeanA beanA 

    @PostConstruct 
    public void postConstructMethod() { 
     //Call some method in BeanA 
    } 
} 
hinzufügen

Von BeanB möchte ich auf BeanA Daten zugreifen und in BeanB post construct möchte ichregistrierenmit BeanA. Deshalb möchte ich BeanA Methode

And All diese Pakete als Glas verpackt sind, nennen und Feder Kontext xml ist

<context:annotation-config /> 
<context:component-scan base-package="w.x.y.z.pkgA,w.x.y.z.pkgB" /> 
<bean id="beanb" clas="w.x.y.z.pkgB.BeanB"></bean> 

Aber während des Einsatzes ich Ausnahme über Bohne in erstellen Zustand

Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'context': Requested bean is currently in creation: Is there an unresolvable circular reference? 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.beforeSingletonCreation(DefaultSingletonBeanRegistry.java:347) 
at w.x.y.z.BeanA<init>(BeanA.java:25) 
at w.x.y.z.BeanB.<init>(BeanB.java:35) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147) 

Ich habe auch versucht, @Autowired entfernt und das BeanA Objekt mit getBeanFactory().getBean(BeanA.class) zu bekommen. Aber ich bekomme denselben Fehler.

Wenn ich Bean-Eintrag aus XML-Datei entfernen, wird es ordnungsgemäß bereitgestellt aber Post-Konstrukt wird nie aufgerufen, da es nicht mehr eine Bean ist.

BeanA ist überhaupt nicht abhängig von BeanB. Keine Referenzen?

Gibt es eine Möglichkeit, diese @Autowired und zu arbeiten, wenn 2 Bohnen im gleichen Glas sind?

+0

Sorry, keine Ahnung, was die mögliche Kreis Referenz erzeugen konnte. Ein letzter Gedanke: Entfernen Sie die explizite Bean-Definition in Ihrer Context-Datei, fügen Sie der Bean eine '@ Component'-Annotation hinzu, da diese bereits im Bereich für Component Scan ist und Spring sein Bestes geben kann. (Meine irreführende Antwort wurde gelöscht) – meistermeier

+0

Vorher es hier posten Ich habe es versucht. Aber kein Glück –

Antwort

0

Sie deklarieren die Bean als <bean id="beanb" clas="w.x.y.z.BeanB"> aus w.x.y.z-Paket.

Versuchen mit

package w.x.y.z 
@Component 
public class BeanA implements InterfaceA { 

} 


package w.x.y.z 
public class BeanB implements InterfaceB { 

    private BeanA beanA 

    @PostConstruct 
    public void postConstructMethod() { 
     //Call some method in BeanA 
    } 

    // Getters and Setters 
} 

und

<context:annotation-config /> 
<context:component-scan base-package="w.x.y.z" /> 
<bean id="beanb" clas="w.x.y.z.BeanB"> 
    <property name="beanA" value="beanA"/> <!-- Spring will create beanA as it is annotated with @Component --> 
</bean> 
+0

Haben Sie versucht, in xml config hinzuzufügen und w.x.y.z.pkgB vom Komponenten-Scan zu entfernen, da nichts zu scannen ist. –

+0

Ja. Ich habe das versucht. Aber der gleiche Fehler –

+0

Haben Sie eine Bohne mit dem Namen "Kontext"? Spring kann diese Bean beim Initialisieren von "beanA" nicht erstellen –

Verwandte Themen