Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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 弹簧接线,单体与原型_Java_Spring_Dependency Injection - Fatal编程技术网

Java 弹簧接线,单体与原型

Java 弹簧接线,单体与原型,java,spring,dependency-injection,Java,Spring,Dependency Injection,在spring上阅读,并且在spring中使用DI时,如果您将bean设置为单实例(默认),那么类的单个实例将被“分发”,而prototype每次强制一个新实例 每次容器分配相同实例的后果是什么? 这是否意味着将有共享状态 i、 e.如果实例在某个地方被修改,所有未来的对象创建实际上都会得到一个“脏”对象,而不是一个“新”对象。单例对象就是这样。每个注入了单例的对象都会获得对同一对象的引用。该对象中的任何更改(通过行为或其他方式)都将对该对象的所有使用者可见。由于您通常使用Spring对接口进行

在spring上阅读,并且在spring中使用DI时,如果您将bean设置为单实例(默认),那么类的单个实例将被“分发”,而prototype每次强制一个新实例

每次容器分配相同实例的后果是什么? 这是否意味着将有共享状态


i、 e.如果实例在某个地方被修改,所有未来的对象创建实际上都会得到一个“脏”对象,而不是一个“新”对象。

单例对象就是这样。每个注入了单例的对象都会获得对同一对象的引用。该对象中的任何更改(通过行为或其他方式)都将对该对象的所有使用者可见。

由于您通常使用Spring对接口进行编程,因此DI管理的对象不需要担心状态。在这种情况下,不必担心“肮脏”。存储库、服务、控制器——所有这些都应该很少或没有状态可言。

如果您将Spring托管bean的范围声明为单例,那么肯定会有共享状态。通常,您不会使用不适当的实例变量,这与创建servlet时避免使用的方式相同。但是控制器的状态将包括它调用的服务,服务的状态将包括对它使用的数据访问对象的引用。

除非使用某种同步,否则肯定应该避免在单例会话bean中维护状态。理想情况下,单例不应该有实例字段。当您需要以对话方式维护状态时,请使用有状态bean。当您处理完一个有状态bean后,必须显式地将其删除,否则就会导致内存泄漏。

那么您是说POJO类并不真正关心状态,它们只是被传递?但是不要创建一个用户对象,然后设置它的属性,然后保存它。如果是单例(默认),设置用户名不会影响以后的所有其他实例吗?否,如果创建用户对象并将其持久化,则调用new创建它并保存它,将其作为事务的一部分放入数据库。当用户引用超出范围时,它可能是GC,也可能不是GC。那不在Spring的控制之下。您没有配置您执行服务或DAO的方式。啊,好的,24小时后阅读您编写的内容是有意义的。你没有用DI设置POJO。。。。