吊带 resource.getResourceResolver() 对比 SlingHttpRequest.getResourceResolver
Sling resource.getResourceResolver() Vs SlingHttpRequest.getResourceResolver
在我的项目中,我在 Sling 模型中看到 类,资源解析器以两种方式获取
@Inject private Resource resource;
ResourceResolver resolver = resource.getResourceResolver();
VS
@Inject @Self private SlingHttpServletRequest request;
ResourceResolver resolver = request.getResourceResolver();
虽然两者都是 Sling 实现,但使用一个对立的有什么好处吗?还是这 2 个产生相同的解析器而没有性能差异?
Resource#getResourceResolver
returns ResourceResolver
用于从存储库检索资源的。这种检索通常会与请求相关联,但并非必须如此。
SlingHttpServletRequest#getResourceResolver
returns 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();
解析器将具有与发出请求的用户相同的权限。
就性能而言,我不知道有任何文档推荐其中一种方法。
在我的项目中,我在 Sling 模型中看到 类,资源解析器以两种方式获取
@Inject private Resource resource;
ResourceResolver resolver = resource.getResourceResolver();
VS
@Inject @Self private SlingHttpServletRequest request;
ResourceResolver resolver = request.getResourceResolver();
虽然两者都是 Sling 实现,但使用一个对立的有什么好处吗?还是这 2 个产生相同的解析器而没有性能差异?
Resource#getResourceResolver
returns ResourceResolver
用于从存储库检索资源的。这种检索通常会与请求相关联,但并非必须如此。
SlingHttpServletRequest#getResourceResolver
returns 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();
解析器将具有与发出请求的用户相同的权限。
就性能而言,我不知道有任何文档推荐其中一种方法。