Resource#getResourceResolver
返回從資源庫中檢索資源的ResourceResolver
。這種檢索通常會與請求相關聯,但不一定是這種情況。
SlingHttpServletRequest#getResourceResolver
返回請求資源被檢索到的ResourceResolver
。
這些資源解析器可能是相同的,但它取決於您的Sling模型實例化的方式。
例如,想象一個與請求沒有直接關聯的OSGi服務。它可能是某種類型的事件處理程序,它會暫時執行並加載一些資源。例如,它可以使用ResourceResolverFactory
和服務用戶映射檢索ResourceResolver
。
ResourceResolver serviceResourceResolver = resourceResolverFactory.getServiceResourceResolver(authenticationInfo);
Resource someResource = serviceResourceResolver.getResource("/path/to/resource");
someResource.adaptTo(MyModel.class);
在這種情況下,你將不能夠注入SlingHttpSerlvetRequest
對象,因此這將失敗:
@Inject
@Self
private SlingHttpServletRequest request;
一般而言,有,因此,在語義不同。
如果我們看一下你在哪裏適應的資源在請求的範圍被檢索的簡單的情況下,以下兩種情況ResourceResolver
應該是等價的:
@Inject private Resource resource;
ResourceResolver resolver = resource.getResourceResolver();
和
@Inject @Self private SlingHttpServletRequest request;
ResourceResolver resolver = request.getResourceResolver();
解析器將具有與發出請求的用戶相同的權限。
說到性能,我不知道任何文檔推薦一種方法或其他。
感謝您的詳細解釋。 –