1

嗨,我有以下短代码:

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

我收到以下错误:

“bean 类 [C] 的无效属性 'targetBeanName':Bean 属性 'targetBeanName' 不可写或具有无效的 setter 方法。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>
4

2 回答 2

0

如果bean定义配置为<aop:scoped-proxy>.

因此,只需删除 bean 的<aop:scoped-proxy>声明b,它就会起作用。

于 2016-04-19T12:59:43.567 回答
0

调试后这是问题所在:

当您在 spring 中定义父级时,这意味着您要继承父级 bean 配置。

当您定义范围代理时,代理 bean 拥有两个属性 targetBeanName 和 ProxyTargetClass。

当您继承作为作用域代理的 bean 时,您将这些属性作为合并父 bean 配置的一部分。然后您的 bean 尝试找到用于设置属性的设置器并引发异常。

这意味着在我们的示例中,即使 c 不是作用域代理,我们仍然会遇到异常。

于 2016-04-19T12:54:38.493 回答