当我这样定义一个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/