Java Stateless Bean 中带有静态变量实例的对象
Java Object with static variable instance inside Stateless Bean
在 EAR 中有一个像计算器 class 的对象可以用作其他无状态 classes 的实用程序吗?
这是一个糟糕的设计吗?如果是这样,应该采用什么适当的方法?
@Stateless
class A{
public void sumForA(){
System.out.println("SUM IS : "+ (Calculator.getInstance().add(4+6)));
}
}
@Stateless
class B{
public void sumForB(){
System.out.println("SUM IS : "+(Calculator.getInstance().add(1+2)));
}
}
public class Calculator{
static{
INSTANCE=new Calculator();
}
private static INSTANCE;
public Calculator getInstance(){
return INSTANCE;
}
public int add(int x,int y){
return x+y;
}
}
首先,没有这个名字"static variable instance",有实例变量和静态变量,你可以在这里找例子:Java Static vs Instance.
其次,关于您的计算器 class,您需要将 getInstance() 方法标记为静态方法,因为您正在直接调用它。而且,您似乎在尝试使用单例模式,我建议您看一下这个 SO 问题:What is an efficient way to implement a singleton pattern in Java?
第三,在您的示例中,statless bean 中没有静态变量,为了简单起见:您仅在 Class 计算器中调用具有静态成员的方法。那为什么不呢?您在方法中使用实用程序 class,它是无状态 bean 还是任何类型的 bean(EJB 会话 bean、CDI/JSF bean、Spring 组件...)都没有关系。
在 EAR 中有一个像计算器 class 的对象可以用作其他无状态 classes 的实用程序吗?
这是一个糟糕的设计吗?如果是这样,应该采用什么适当的方法?
@Stateless
class A{
public void sumForA(){
System.out.println("SUM IS : "+ (Calculator.getInstance().add(4+6)));
}
}
@Stateless
class B{
public void sumForB(){
System.out.println("SUM IS : "+(Calculator.getInstance().add(1+2)));
}
}
public class Calculator{
static{
INSTANCE=new Calculator();
}
private static INSTANCE;
public Calculator getInstance(){
return INSTANCE;
}
public int add(int x,int y){
return x+y;
}
}
首先,没有这个名字"static variable instance",有实例变量和静态变量,你可以在这里找例子:Java Static vs Instance.
其次,关于您的计算器 class,您需要将 getInstance() 方法标记为静态方法,因为您正在直接调用它。而且,您似乎在尝试使用单例模式,我建议您看一下这个 SO 问题:What is an efficient way to implement a singleton pattern in Java?
第三,在您的示例中,statless bean 中没有静态变量,为了简单起见:您仅在 Class 计算器中调用具有静态成员的方法。那为什么不呢?您在方法中使用实用程序 class,它是无状态 bean 还是任何类型的 bean(EJB 会话 bean、CDI/JSF bean、Spring 组件...)都没有关系。