我有一个简单的类,它有一个名为“executor”的属性,我想用{3.0}连接ExecutorService
。我按照文档说明您只使用工厂类(在本例中为Executors
)并提供工厂方法来创建您的服务。但是,当我尝试将结果bean连接到我的类时,似乎spring认为类类型是java.lang.String而不是ExecutorService。
我不知道我在这里做错了什么。如果我查看文档,我似乎是正确的,但也许我需要以某种方式指出调用工厂方法的结果类?
这是错误:
java.lang.IllegalStateException:无法将类型[java.lang.String]的值转换为属性“executor”所需的类型[java.util.concurrent.ExecutorService]:找不到匹配的编辑器或转换策略
使用此配置:
<bean id="taskManager" class="examples.TaskManager">
<property name="executor">
<idref local="executorService" />
</property>
</bean>
<bean id="executorService" class="java.util.concurrent.Executors"
factory-method="newSingleThreadExecutor"
destroy-method="shutdownNow" />
和这堂课:
public class TaskManager {
private ExecutorService executor;
public ExecutorService getExecutor() {
return executor;
}
public void setExecutor(ExecutorService executor) {
this.executor = executor;
}
}
答案 0 :(得分:7)
尝试简单的ref
属性,而不是idref
:
<bean id="taskManager" class="examples.TaskManager">
<property name="executor" ref="executorService" />
</bean>
并here看idref
的含义是将引用的bean的名称(作为String
)传递给该属性。
哦,这是Spring doc itself:
idref元素
idref元素只是一种传递id的错误方法(字符串 容器中另一个bean的值 - 而不是引用) 或元素。
答案 1 :(得分:1)
使用ref代替idref idref返回传递参数的字符串名称
<bean id="taskManager" class="examples.TaskManager">
<property name="executor" ref="executorService" />
</bean>
spring框架中的idref元素
idref元素允许您将容器中另一个bean的bean id(字符串值而不是引用)传递给或。在给定的示例中,清楚地显示了如何将bean id传递给另一个bean并显示bean id
参考http://www.roseindia.net/tutorial/spring/spring3/ioc/springidrefelement.html
参考注射
在引用注入中,将一个bean定义注入另一个bean定义。对于引用注入,您可以使用constructor-arg或property的ref属性而不是value属性。
参考http://www.roseindia.net/tutorial/spring/spring3/ioc/springreferenceinjection.html