当我这样定义一个bean时:

<bean id="testBean2" class="test">
</bean>

<bean id="testBean" factory-bean="testBean2" factory-method="getter"/>

class test {
    public void getter(){};
}

我不需要将bean定义为静态的。
但是,如果我像这样定义bean:
<bean id="testBean" class="test" factory-method="getter">
 </bean>

我收到一个spring错误,要求bean是静态的,因此需要将其更改为:
   class test {
        public static void getter(){};
    }

为什么会这样?两个实现都不应该是静态的吗?

最佳答案

您试图创建一个静态工厂(带有一个关联的方法)来创建您的bean。
代码如下:

public class BeanClass {

    private static BeanClass instance = new BeanClass();

    private BeanClass(){
    }

    public static BeanClass getter(){
       return instance;
    }
}

您的spring上下文可能类似于:
<bean id="beanClassInstance" class="BeanClass" factory-method="getter"/>

这将使用静态工厂方法,而不是试图通过构造函数实例化单例。

关于java - 为什么在Spring中将方法声明为静态方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20271535/

10-13 07:54