在Spring Singleton中创建新实例会造成内存泄漏吗?

我正在维护一个应用程序,并注意到在Spring连接中定义为Singleton的许多对象在其方法中创建了其他对象的新实例。

例如,每次调用login()方法时都会有一个LoginService Singleton创建一个新的LoginDetails实例。 LoginDetails是瞬态的,只有执行login()方法才需要。

我的问题是,如果Spring为LoginService创建了一个单独的对象,那么如何将LoginDetails实例标记为垃圾收集作为对创建它们的对象的引用并使用它们永远不会终止?

我的意思是:

public void deleteCustomer(Long customerId, HttpServletRequest request) { CustomerType customerType = new CustomerType(); customerType.setCustomerId(customerId); CustomerDeleteRequestType deleteRequest = new CustomerDeleteRequestType(); deleteRequest.setCustomer(customerType); CustomerDeleteResponseType deleteResponse = mmmwsClient.executeRequest(deleteRequest); log.debug("Delete Response Recieved from Server for Customer Name Update " + deleteResponse.getServiceResult()); } 

因为使用的字段只是方法变量而不是实例变量,我想当方法完成时会破坏对它们的引用?

我对Spring Singleton的理解是否正确?

谢谢

如果单例不维护对它创建的对象的引用(通过将它们存储在实例字段中),并且如果没有其他可到达对象维护对这些对象的引用,则它们变得无法访问,并且垃圾收集器会收集它们。

谁创建了一个对象对垃圾收集器来说并不重要。 谁有对象的引用是。

老实说,我不明白这个问题,但是已经是深夜,所以请耐心等待。

我查看了这个页面,似乎每次调用该方法时都会创建一个新实例。

如果你像他们一样使用它,一个很好的替代品可能是:

 private static MessageResourceSingleton singleton; public static MessageResourceSingleton getInstance() { if (singleton == null) { singleton = new MessageResourceSingleton(); } return singleton; } 

我可能不完全明白你的目标,但如果你能告诉我们一些你正在使用它的例子,那将会有很大帮助。