如何从静态内部类构造函数创建Spring bean?

时间:2010-09-29 02:25:09

标签: java spring dependency-injection inversion-of-control ioc-container

我正在尝试使用Spring Framework IoC Container来创建类的实例 ThreadPoolExecutor.CallerRunsPolicy。在Java中,我会这样做......

import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
...
RejectedExecutionHandler rejectedExecutionHandler = new ThreadPoolExecutor.CallerRunsPolicy();

但是当我尝试在Spring中执行等效操作时,它会抛出 CannotLoadBeanClassException

<beans>
   <bean class="java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy"/>
</beans>

更一般地说:在Spring ApplicationContext XML中,如何调用静态内部类的构造函数?

2 个答案:

答案 0 :(得分:13)

我认为它不起作用的原因是因为Spring无法将其理解为静态内部类。 可能这可行:

<beans>
   <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy"/>
</beans>

答案 1 :(得分:1)

使用the factory-method attribute

  

以下bean定义指定通过调用factory-method创建bean。该定义未指定返回对象的类型(类),仅指定包含工厂方法的类。在此示例中,createInstance()方法必须是静态方法。

<bean id="clientService" class="examples.ClientService"
  factory-method="createInstance"/>