2016-04-17 4 views
1

Привет У меня есть следующий короткий код:Сочетание области действия прокси и родительского

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

Я получаю следующее сообщение об ошибке:

«Недопустимое свойство„targetBeanName“класса боба [C] : Свойство bean 'targetBeanName' не доступно для записи или имеет неверный метод setter. Соответствует ли тип параметра сеттера типу возвращаемого значения getter? "

Буду рад понять способ.

Заранее спасибо.

Добавление файла контекста, чтобы сохранить доступ к GitHub

<?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> 

ответ

0

Ну после отладки это вопрос:

При определении родителя весной, что означает, что вы хотите, чтобы наследовать настройки родительского компонента.

Когда вы определяете прокси-сервер сферы, прокси-бэн содержит два свойства targetBeanName и ProxyTargetClass.

Когда вы наследуете bean-компонент, который является областью действия прокси-сервера, вы получаете эти свойства как часть слияния конфигурации родительского компонента. Затем ваш bean-компонент пытается найти установщика для задания свойства и исключения для исключения.

Это означает, что в нашем примере, даже если c не был ограниченным прокси-сервером, мы все равно получили исключение.

0

Вы не можете использовать определение компонента в качестве родителя , если определение компонента сконфигурировано как <aop:scoped-proxy>.

Таким образом, просто удалите объявление <aop:scoped-proxy> для фасоли b, и оно будет работать.