【发布时间】:2011-02-25 23:27:52
【问题描述】:
Java 是否有在 hibernate 中打开会话时可以使用的 using 语句?
在 C# 中类似于:
using (var session = new Session())
{
}
所以对象超出范围并自动关闭。
【问题讨论】:
-
"允许为对象定义范围" 这不是
using所做的。范围不是生命周期(严格来说,using也与生命周期无关,因为Dispose不会破坏对象的内存。) -
@Joren 您的评论获得了投票,但我可以提供更多信息。您是介绍“终生”概念的人,然后您说这与“终生”无关。范围是 msdn 库中定义中使用的术语,也许我误用了它。你会如何定义
using statement。 -
Scope 是指代码中的区域,您可以在其中引用标识符而无需使用其完全限定名称(局部变量、类型、方法名称等)。生命周期是指对象或变量可访问的时间。见blogs.msdn.com/b/ericlippert/archive/2009/08/03/…
-
例如,如果您有一个局部变量并为其分配一个值类型实例,那么您的值的生命周期将在其变量的生命周期结束时结束。但是,如果您分配了一个对象,并将对它的引用存储在本地,那么该对象的生命周期很可能会超过其存储的生命周期,只要在其他地方仍有对该对象的引用。至于
using,它会在其作用域的末尾自动dispose对象,但它不会deallocate对象——它的生命周期直到它的所有引用都结束才结束消失了。
标签: java hibernate using-statement