@ScriptVariable resourceResolver vs @SlingObject resourceRes



谁能给我解释一下通过注释@ScriptVariable和注释@SlingObject调用resourceResolver的区别?在什么情况下他们的行为不同?

关键的区别在于对象的检索方式。@ScriptVariable@SlingObject特定于注入器的注释。这意味着你可以使用它们来指示Sling model使用特定的注入器。

能够识别@ScriptVariable注释的注入器可以注入作为脚本变量可用的对象。在resourceResolver的情况下,它应该是与请求相关联的。slingRequest.getResourceResolver()

查看代码,在带有@SlingObject注释的字段上启动的注入器更有趣,因为它将检查可适应的(您的Sling模型正在被适应)并相应地获得解析器:

  • 如果adaptive是Resource,它将返回resource.getResourceResolver(),即最初用于加载资源的解析器。这可能很随意。
  • 如果adaptive是SlingHttpServletRequest,它将返回request.getResourceResolver(),即Sling实例化的与请求和用户发出请求的会话相关的解析器。
  • 如果adaptive本身是ResourceResolver,则直接返回。

在某些情况下,这三者之间的差异可以忽略不计,但有时选择哪个解析器非常重要。例如,如果你的模型应该在请求范围之外使用(想象它是由一个按时间表运行的OSGi服务实例化的,并且没有传入的请求),你最好使用resourceresourceResolver作为可适应的。

相关内容

  • 没有找到相关文章

最新更新