1

我有一个 Java 类,我用它来实例化多个对象以用于测试用例。在我调用此类的 spring 配置中,我有以下内容:

<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 进行调试我可以看到,当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();
        }
}
4

1 回答 1

1

对我来说似乎有两个问题,一个是构建问题,通过吹走和重新创建我的工作区来解决。第二个问题是在我的情况下,类型 C 已参数化,我需要指定new C<T>();而不是仅指定new C();. 我在 C 中使用静态方法( C.makeC(Params...))来实例化我认为导致错误的对象。所以我猜这是导致这种情况的类型擦除问题。感谢所有的帮助!

-尼鲁

于 2013-01-09T21:29:35.840 回答