我从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();
}
}
这个问题是关于“我们应该关闭两者”而不是先关闭
答案 0 :(得分:9)
当您调用ResourceResolver
方法时,Session
会关闭基础ResourceResolver.close()
。
如果您使用较新版本的Sling,我会建议您在使用try-with-resource
时使用ResourceResolver
构造:
try (final ResourceResolver resolver = this.getResourceResolver()) {
[... use resolver here ...]
}
由于ResourceResolver
实现了AutoClosable
接口,因此它可以与try-with-resource
一起使用。这将始终关闭ResourceResolver
,您不必处理异常等。
请注意,您只能使用自己创建的ResourceResolver
执行此操作。如果您使用从ResourceResolver
获得的Resource
,则不应将其关闭。最佳做法是,只有创建ResourceResolver
的人才能关闭它。
答案 1 :(得分:2)
关闭一个将关闭它们。如果您记录消息或调试,您将看到您没有输入第二个if语句。