使用Spring工厂方法连接ExecutorService

时间:2012-02-09 08:45:08

标签: java spring

我有一个简单的类,它有一个名为“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;
    }   
}

2 个答案:

答案 0 :(得分:7)

尝试简单的ref属性,而不是idref

<bean id="taskManager" class="examples.TaskManager">
    <property name="executor" ref="executorService" />
</bean>

hereidref的含义是将引用的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