1

テストケースで使用する複数のオブジェクトをインスタンス化するために使用している Java クラスがあります。このクラスを呼び出すための春の構成では、次のようなものがあります。

<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 jar を介してデバッグすると、BeanMyClass.getC()が作成されたときにメソッドが取得されず、メソッドとオブジェクト メソッドがgetLeafMethods()検出されますが、クラス内の他のメソッドは検出されないことがわかります。以前にこのような問題に遭遇した人はいますか、またはクラス内のすべてのメソッドを見つけることができない理由を知っていますか?getA()getB()

実際のコードを投稿することはできませんが、より単純なバージョンを次に示します。

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();
        }
}
4

1 に答える 1

1

私には2つの問題があったようです。1つはビルドの問題で、ワークスペースを吹き飛ばして再作成することで解消されました。2 番目の問題は、私の場合、型 C がパラメーター化されていたため、new C<T>();の代わりに指定する必要がありましたnew C();。C 内で静的メソッドを使用して( C.makeC(Params...))、エラーの原因と思われるオブジェクトをインスタンス化していました。したがって、これを引き起こしたのは型消去の問題だったと思います。助けてくれてありがとう!

-ニル

于 2013-01-09T21:29:35.840 に答える