2013-01-08 54 views
1

我有一個Java類,我用它來實例化多個對象以用於測試用例。 在用於調用此類我的春天配置我有類似如下:BeanCreationException:找不到工廠方法

<bean id="myClass" class="com.foo.MyClass"> 
    <constructor-arg ref="myBean" /> 
</bean> 

<bean id="myBeanA" factory-bean="myClass" factory-method="getA" /> 
<bean id="myBeanB" factory-bean="myClass" factory-method="getB" /> 
<bean id="myBeanC" factory-bean="myClass" factory-method="getC" /> 

MyClass的不擴展任何東西。 我的問題是,調用方法MyClass.getA()MyClass.getB()作品,但MyClass.getC()並不總是拋出的方法BeanCreationException: No factory method found getC()

都不是靜態的,所有的人都是公開的。通過Spring jars進行調試我可以看到,當創建MyClass.getC()的bean時,它在getLeafMethods()時沒有選擇方法,但會找到方法getA()getB()和Object方法,但是沒有其他類中的方法。有沒有人遇到過這樣的問題,或知道爲什麼它無法找到類中的所有方法?

我不能發佈實際的代碼,但這裏是它的簡單的版本:

public class MyClass { 
     private A a; 
     private int i; 
     public MyClass(D param) { 
      //initialize here 
     } 

     public A getA() { 
      return a; 
     } 

     public B getB() { 
      return new B(i++); 
     } 

     //I could invoke this in a static way 
     //however the same issue occurs either way. 
     public C getC() { 
      return new C(); 
     } 
} 
+0

這些方法應該是靜態的和公共的。發佈myClass。 –

+0

請發佈工廠代碼 – Henry

+0

發佈您的MyClass代碼。 getC()可能不會返回bean對象... –

回答

1

似乎有2個問題對我來說,一個是它與吹走並重新創建我的工作區清除積聚的問題。第二個問題是在我的情況下,C型是參數化的,我需要指定new C<T>();而不是new C();。我在C (C.makeC(Params...))中使用靜態方法來實例化我認爲導致錯誤的對象。所以我想這是造成這種類型的擦除問題。感謝所有的幫助!

-Niru

+0

將此標記爲您的問題的答案! –

相關問題