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

Elw*_*ood 3 java spring design-patterns

我目前正在维护一个应用程序,并注意到在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());

}
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

JB *_*zet 5

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

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