Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否过度使用Spring单例?_Java_Spring - Fatal编程技术网

Java 我是否过度使用Spring单例?

Java 我是否过度使用Spring单例?,java,spring,Java,Spring,我读过很多关于Singleton设计模式的不好的东西,但是从我收集的资料来看,Spring Singleton不是一回事,使用它是完全好的 然而,最近我开始怀疑我是否在我正在开发的新应用程序中过度使用了它。我在这个应用程序中几乎所有的类都是Spring单例bean。这是一个Jersey web服务,只有很少的服务类会注入业务对象类(IoC),它包含所有业务逻辑并与DAO类通信,DAO类也是由Spring注入的 我认为,因为我可以很容易地使所有类成为无状态的,所以不存在线程安全问题,而且因为Spr

我读过很多关于Singleton设计模式的不好的东西,但是从我收集的资料来看,Spring Singleton不是一回事,使用它是完全好的

然而,最近我开始怀疑我是否在我正在开发的新应用程序中过度使用了它。我在这个应用程序中几乎所有的类都是Spring单例bean。这是一个Jersey web服务,只有很少的服务类会注入业务对象类(IoC),它包含所有业务逻辑并与DAO类通信,DAO类也是由Spring注入的

我认为,因为我可以很容易地使所有类成为无状态的,所以不存在线程安全问题,而且因为Spring缓存了类的实例,所以从性能角度来看,这将是一个合理的解决方案

后来我看到了一个由第三方供应商为我的公司开发的应用程序,这是软件公司,他们所有的SpringBean都被定义为“singleton=false”,尽管他们中的大多数都没有任何状态。我开始想,这是否是SpringBean的最佳实践方法,如果我实际上过度使用了单例呢


有没有人对这件事的最佳做法有什么评论?我应该尽可能地使用Spring singleton还是应该远离它?

您的方法很好。单例的常见问题(除了全局可变状态,这听起来似乎不是问题)是单例管理自己的单一性(意味着静态getInstance方法),这使得测试变得困难。在春季,这是由工厂控制单例的范围来处理的


对于单例来说,另一个麻烦的方面是如何从任何地方调用任何东西。你可以通过严格的分层方法来处理这个问题。

我不认为有“过度使用”的情况。只要确保你正确地使用了它们(即正确地定义你的bean)。有关更多信息,请参阅。我认为你很好。我对第三方供应商不是很确定。如果他们无意创建一个bean的多个实例,那么将其标记为
singleton=false
会误导配置文件的读者。singleton的常见问题是它们被过度使用,应用程序数据变得支离破碎和不连贯。@Hot:agreed,如果我的编辑没有涵盖这一点,我愿意接受建议。