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 组件...)都没有关系。