7

ThreadPoolExecutor.CallerRunsPolicy sınıfının bir örneğini oluşturmak için Spring Framework IoC Container'ı kullanmaya çalışıyorum. Java, ben ... oStatik bir iç sınıf yapıcıdan bir Spring bean nasıl oluşturulur?

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

bu şekilde yapacağını Ama ilkbaharda eşdeğer yapmaya çalıştığında, bir CannotLoadBeanClassException atar.

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

Daha genel: Bir Bahar ApplicationContext XML, nasıl bir statik iç sınıfın bir yapıcısı arayabilirim?

cevap

13

Spring statik iç sınıf olarak bunu anlamak mümkün olmadığı için çalışmıyor sebebi olduğunu düşünüyorum. Ben "fabrika yöntemi" birkaç varyasyonları girişiminde de

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

Özgün soru ve kod örneğini yeniden okurken, çizmenin statik bir yöntemi hiç çağırmaya çalışmadığını fark ettim; sadece yuvalanmış bir sınıfın kurucusu. '$' Sözdizimi burada kullanmak doğrudur, bunu daha önce kendim kullandım. –

+0

Bu işe yaradı, teşekkürler Ankit. Bahar dokümanları şu adreste: http://static.springsource.org/spring/docs/2.0.x/reference/beans.html#beans-factory-class ve şunu söylüyor: "Statik bir iç sınıf için bir fasulye tanımı yapılandırmak, İç sınıfın ikili adını kullanmalısın. " – Drew

1

Kullanım the factory-method attribute:

aşağıdaki fasulye tanım fasulye fabrika yöntemini çağırarak oluşturulur belirtir. Tanım, döndürülen nesnenin türünü (sınıfını), yalnızca fabrika yöntemini içeren sınıfı belirtmez. Bu örnekte, createInstance() yöntemi statik bir yöntem olmalıdır.

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

ama ThreadPoolExecutor.CallerRunsPolicy düzenli eski Java kurucusu tutar olduğundan burada çalışmıyor: Muhtemelen bu çalışabilirsiniz. Bu statik bir sınıftır. – Drew

+0

CRP'nin statik iç içe geçmiş bir sınıf olması, burada önemli olmamalıdır. Matt b'nin durağan bir yöntem için örneği doğru olsa da, aslında burada statik bir yöntemi çağırmak zorunda değilsiniz ... sadece basit bir kurucu. Bu söyleniyor, CannotLoadBeanClassException ayrıntılarını geri kalanını görmek için merak ediyorum. – RonU

İlgili konular