<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]':找不到匹配的编辑器或转换策略。
答案 0 :(得分:1)
您确定已发布所有配置吗?
因为有一些AOP“隐藏”(可能是注释)代码,因为代理了service
bean。
你必须选择:
private Set<MyService> services
的声明更改为“私人设置服务”MyService
)而不是接口(MyInterface
)检查您的代码
答案 1 :(得分:0)
也许您可以尝试初始化Set服务以进行初始化。
您刚宣布为
private Set<MyService> services;
它只考虑接口Set和你的bean配置中看起来默认情况下该set是LinkedHashSet。
因此,您可以尝试初始化您的Set服务,例如:
private Set<MyService> services = new LinkedHashSet<>();