Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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_Spring Mvc_Spring Security_Spring Roo - Fatal编程技术网

Java 为什么Spring将实例初始化为单例?哪些原因影响了他们以这种方式处理初始化的决定?

Java 为什么Spring将实例初始化为单例?哪些原因影响了他们以这种方式处理初始化的决定?,java,spring,spring-mvc,spring-security,spring-roo,Java,Spring,Spring Mvc,Spring Security,Spring Roo,我不理解为什么Spring框架默认设计为返回单例实例。因此,在调用应用程序上下文时会传递相同的对象。是什么原因影响了spring以这种方式处理bean初始化的决定?如果所有bean都被初始化为原型,那么会发生什么不好的事情 提前谢谢。我认为Spring文档非常好地解释了这一点。简而言之,原因是如果您的bean是无状态的,那么您不需要多个实例。由于大多数bean是无状态的,“singleton”是一个默认范围。但是,您可以更改此设置。还有其他作用域,例如会话、请求等 例如,如果您实现了web应用商

我不理解为什么Spring框架默认设计为返回单例实例。因此,在调用应用程序上下文时会传递相同的对象。是什么原因影响了spring以这种方式处理bean初始化的决定?如果所有bean都被初始化为原型,那么会发生什么不好的事情


提前谢谢。

我认为Spring文档非常好地解释了这一点。简而言之,原因是如果您的bean是无状态的,那么您不需要多个实例。由于大多数bean是无状态的,“singleton”是一个默认范围。但是,您可以更改此设置。还有其他作用域,例如会话、请求等

例如,如果您实现了web应用商店并且需要简短的实现,那么您需要的就是会话范围。但是,如果您支持为每个请求分别发送的特殊参数,那么您可能希望为此使用请求范围


但访问数据库、执行身份验证、发送电子邮件或SMS、执行其他业务逻辑的bean可以而且应该使用单例范围实现

基本上,我不理解的部分更多的是一个新手问题。为什么处理业务逻辑的bean必须使用singleton作用域来实现?它们不需要这样做。但经过多年的经验,许多开发人员发现,使用执行业务逻辑的无状态对象会减少代码问题。(更容易重构,更容易并发,更容易测试,…)能否请您提供一个无状态业务对象的示例,它作为一个单实例比每次新实例都有用得多