0

与 CQ5 中的每个组件 jsp 都包含 global.jsp 不同,sightly 不包含任何此类依赖项。它实际上是如何访问所有全局对象的。它的后端流程是什么。以及代码如何编译成java?

4

1 回答 1

2

漂亮的代码如何编译成java?

SlingSightly API 有两个包来支持这一点,第一步是编译成抽象语法树抽象语法树以树的形式映射纯 Java 源代码。这种树比文本更方便可靠地以编程方式分析和修改-based source。)这是由Apache Sling Scripting Sightly Compiler完成的

接下来是将抽象语法树转换(转译)为 java 源代码。这是在捆绑Java 编译器中实现的

它实际上是如何访问所有全局对象的。

要理解这一点,您需要了解 Sling 中如何进行脚本解析以及如何将资源解析为脚本,这是 Sling 脚本引擎的核心。要了解 ScriptEngine 的基础知识,请查看这里的 java 文档,它的实现是SightlyScriptEngine

脚本解析的工作方式是资源适应DefaultSlingScript,这是由SlingScriptAdapterFactory.

SlingScriptAdapterFactory具有BindingsValuesProvider传递给DefaultSlingScript. 其中一个实现BindingsValuesProviderAEMSightlyBindingsValuesProvider(您可以在 中将其视为服务/system/console/services),它提供了默认对象。

然后DefaultSlingScript负责调用SightlyScriptEngine和调用它的方法,该方法eval填充绑定中的默认对象,然后将此绑定设置为请求属性。

于 2016-08-09T21:04:01.337 回答