Java 我可以在spring服务层中使用静态变量吗?
我想从服务层在整个应用程序中使用静态计数器Java 我可以在spring服务层中使用静态变量吗?,java,spring,static,Java,Spring,Static,我想从服务层在整个应用程序中使用静态计数器 可以在spring的服务层中使用静态计数器?默认情况下,Springbean是单例的。因此,您不必将字段设置为静态以确保只有一个实例(当然,您可以这样做:Java代码就是Java代码) 不过,重要的是,多线程可以访问您的计数器。因此,您必须确保所有这些访问都是线程安全的。最简单的方法可能是使用AtomicInteger或AtomicLong来实现计数器。默认情况下,Springbean是单例的。因此,您不必将字段设置为静态以确保只有一个实例(当然,您可
可以在spring的服务层中使用静态计数器?默认情况下,Springbean是单例的。因此,您不必将字段设置为静态以确保只有一个实例(当然,您可以这样做:Java代码就是Java代码)
不过,重要的是,多线程可以访问您的计数器。因此,您必须确保所有这些访问都是线程安全的。最简单的方法可能是使用AtomicInteger或AtomicLong来实现计数器。默认情况下,Springbean是单例的。因此,您不必将字段设置为静态以确保只有一个实例(当然,您可以这样做:Java代码就是Java代码)
不过,重要的是,多线程可以访问您的计数器。因此,您必须确保所有这些访问都是线程安全的。最简单的方法可能是使用AtomicInteger或AtomicLong实现计数器。同意非静态AtomicInteger或AtomicLong适用于这种情况。关于“不必使字段保持静态以确保只有一个实例”的注释:使用实例变量,如果使用基于子类的代理(CGLIB),实际上可以为单例bean创建两个实例。对于一个简单的计数器,这不应该是一个问题。对于在单例构造函数中创建的昂贵资源,这可能是一个考虑因素。同意在这种情况下,非静态AtomicInteger或AtomicLong是合适的。关于“不必使字段保持静态以确保只有一个实例”的注释:使用实例变量,如果使用基于子类的代理(CGLIB),实际上可以为单例bean创建两个实例。对于一个简单的计数器,这不应该是一个问题。对于在单例构造函数中创建的昂贵资源,这可能是一个考虑因素。