Spring Prototype引用Singleton

时间:2014-07-03 07:44:11

标签: java multithreading spring concurrency prototype-scope

我正在使用ConcurrentTaskExecutor同时运行多个任务。默认情况下,在spring中,它的范围为 singleton

我的taskExecutor原型threadPoolExecutor是no.t

请求时,会返回新的taskExecutor。我的问题是,既然我们从原型中引用了threadPoolExecutor,那么threadPoolExecutor会成为新的实例吗?

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ConcurrentTaskExecutor" scope="prototype">
    <property name="concurrentExecutor" ref="threadPoolExecutor"/>
</bean>
<bean id="threadPoolExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="100" />
    <property name="maxPoolSize" value="200" />
    <property name="queueCapacity" value="1000" />
</bean>

2 个答案:

答案 0 :(得分:3)

“prototype”关键字只意味着每次向Spring询问实例时,都会得到一个新的实例。有了你的布线,你只需要一次。所以我希望你的taskExecutor bean将是一个单独的实例。

答案 1 :(得分:2)

不,prototype关键字没有&#34;深&#34;范围。它不适用于引用或内部bean。

对于标记为原型的bean,即taskExecutor,Spring会在每次请求时创建一个新实例。但是所有这些新的taskExecutors都将包含threadPoolExecutor的相同单例实例。