我们是否需要同时关闭 Resource Resolver 和 Session?
Do we need to close Resource Resolver and Session both?
我正在从 ResourceResolverFactory 获取一个 ResourceResolver 对象,即我正在创建这个 resourceResolver 并且我正在适应 Session。
Session session = resourceResolver.adaptTo(Session.class);
我是否需要同时关闭解析器和会话,或者关闭一个就足够了?
finally {
if (session != null && session.isLive()) {
session.logout();
}
if (resourceResolver != null && resourceResolver.isLive()) {
resourceResolver.close();
}
}
这个问题是关于"should we be closing both"而不是先关闭哪个
关闭一个将同时关闭它们。如果您记录消息或调试,您会看到您没有输入第二个 if 语句。
当您调用 ResourceResolver.close()
方法时,ResourceResolver
将关闭基础 Session
。
如果您使用较新版本的 Sling,我建议您在使用 ResourceResolver
:
时使用 try-with-resource
结构
try (final ResourceResolver resolver = this.getResourceResolver()) {
[... use resolver here ...]
}
由于 ResourceResolver
实现了 AutoClosable
接口,它可以与 try-with-resource
一起使用。这将始终关闭 ResourceResolver
,您将不必处理异常等
请注意,您只能使用您创建的 ResourceResolver
来执行此操作。例如,如果您使用从 Resource
获得的 ResourceResolver
,则不应关闭它。最好的做法是只有 ResourceResolver
的创建者才能关闭它。
我正在从 ResourceResolverFactory 获取一个 ResourceResolver 对象,即我正在创建这个 resourceResolver 并且我正在适应 Session。
Session session = resourceResolver.adaptTo(Session.class);
我是否需要同时关闭解析器和会话,或者关闭一个就足够了?
finally {
if (session != null && session.isLive()) {
session.logout();
}
if (resourceResolver != null && resourceResolver.isLive()) {
resourceResolver.close();
}
}
这个问题是关于"should we be closing both"而不是先关闭哪个
关闭一个将同时关闭它们。如果您记录消息或调试,您会看到您没有输入第二个 if 语句。
当您调用 ResourceResolver.close()
方法时,ResourceResolver
将关闭基础 Session
。
如果您使用较新版本的 Sling,我建议您在使用 ResourceResolver
:
try-with-resource
结构
try (final ResourceResolver resolver = this.getResourceResolver()) {
[... use resolver here ...]
}
由于 ResourceResolver
实现了 AutoClosable
接口,它可以与 try-with-resource
一起使用。这将始终关闭 ResourceResolver
,您将不必处理异常等
请注意,您只能使用您创建的 ResourceResolver
来执行此操作。例如,如果您使用从 Resource
获得的 ResourceResolver
,则不应关闭它。最好的做法是只有 ResourceResolver
的创建者才能关闭它。