2016-04-17 9 views
1

Hallo, ich habe folgenden Kurzcode:Kombination von Rahmen-Proxy und Eltern

https://github.com/shmuel-buchnik/scope-issue

ich die folgende Fehlermeldung erhalten:

„Ungültige Eigenschaft 'targetBeanName' der Bean-Klasse [C] : Bean-Eigenschaft 'targetBeanName' ist nicht schreibbar oder hat eine ungültige Setter-Methode. Passt der Parametertyp des Setter zum Rückgabetyp des GETTERs? "

Ich werde mich freuen, Weg zu verstehen.

Vielen Dank im Voraus.

Kontext Dateizugriff speichern zu GitHub Hinzufügen

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> 

<bean name="a" class="A"> 
<property name="action" ref="c"/> 
    </bean> 
<bean name="b" class="B" scope="prototype"> 
    <property name="d" ref="d"/> 
    <aop:scoped-proxy proxy-target-class="false"/> 
</bean> 
<bean name="c" class="C" parent="b" scope="prototype"> 
    <aop:scoped-proxy proxy-target-class="false"/> 
</bean> 
<bean name="d" class="D"/> 


</beans> 

Antwort

0

Nun, nachdem das Debuggen ist die Frage:

Wenn Sie ein Elternteil im Frühjahr definieren, das bedeutet, dass Sie übergeordnete Bean Konfiguration erben möchten.

Wenn Sie den Bereichs-Proxy definieren, enthält die Proxy-Bean zwei Eigenschaften targetBeanName und ProxyTargetClass.

Wenn Sie eine Bean erben, die ein Bereichs-Proxy ist, erhalten Sie diese Eigenschaften als Teil der Zusammenführung der übergeordneten Bean-Konfiguration. Wenn Ihre Bean einen Setter zum Festlegen der Eigenschaft und zum Auslösen der Ausnahme sucht.

Dies bedeutet, dass in unserem Beispiel, auch wenn c nicht im Bereich Proxy war, wir immer noch die Ausnahme bekommen.

0

Sie können eine Bean-Definition nicht als Parent verwenden, wenn die Bean-Definition als <aop:scoped-proxy> konfiguriert ist. So löschen Sie einfach die <aop:scoped-proxy> Deklaration für die b Bean, und es wird funktionieren.