Spring属性的Spring bean问题

时间:2014-03-26 08:20:13

标签: java spring

我有豆子,例如

<bean id="manager" class="com.Manager" init-method="init">
       <property name="services">
        <set>
            <ref bean="service" />
        </set>
    </property>
</bean>

<bean id="myService"
        class="com.MyService" abstract="true">
</bean>

<bean id="service" class="com.SpecificService" parent="myService">

</bean>

service(SpecificService)是使用抽象方法init()扩展抽象类MyService的类 并使用特定于方法的逻辑()实现接口MyInterface。

因此,manager在服务对象上调用方法init(),如下所示:

private Set<MyService> services;

public void init() {

    for (MyService service : services) {
        service.init();
    }



}

但是我在bean初始化时遇到了以下问题:

  

无法转换类型'java.util.LinkedHashSet'的属性值    对于属性'services'的必需类型'java.util.Set';嵌套异常是java.lang.IllegalStateException:无法将类型[com.sun.proxy。$ Proxy108实现com.MyInterface,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised]的值转换为所需类型[ com.MyService]用于属性'services [0]':找不到匹配的编辑器或转换策略。

2 个答案:

答案 0 :(得分:1)

您确定已发布所有配置吗? 因为有一些AOP“隐藏”(可能是注释)代码,因为代理了service bean。 你必须选择:

  1. private Set<MyService> services的声明更改为“私人设置服务”
  2. 在您的AOP代码中,让代理公开目标类(MyService)而不是接口(MyInterface
  3. 检查您的代码

答案 1 :(得分:0)

也许您可以尝试初始化Set服务以进行初始化。

您刚宣布为

private Set<MyService> services;

它只考虑接口Set和你的bean配置中看起来默认情况下该set是LinkedHashSet。

因此,您可以尝试初始化您的Set服务,例如:

 private Set<MyService> services = new LinkedHashSet<>();