与 CQ5 中的每个组件 jsp 都包含 global.jsp 不同,sightly 不包含任何此类依赖项。它实际上是如何访问所有全局对象的。它的后端流程是什么。以及代码如何编译成java?
1 回答
漂亮的代码如何编译成java?
SlingSightly API 有两个包来支持这一点,第一步是编译成抽象语法树(抽象语法树以树的形式映射纯 Java 源代码。这种树比文本更方便可靠地以编程方式分析和修改-based source。)这是由Apache Sling Scripting Sightly Compiler完成的
接下来是将抽象语法树转换(转译)为 java 源代码。这是在捆绑Java 编译器中实现的
它实际上是如何访问所有全局对象的。
要理解这一点,您需要了解 Sling 中如何进行脚本解析以及如何将资源解析为脚本,这是 Sling 脚本引擎的核心。要了解 ScriptEngine 的基础知识,请查看这里的 java 文档,它的实现是SightlyScriptEngine
脚本解析的工作方式是资源适应DefaultSlingScript
,这是由SlingScriptAdapterFactory
.
SlingScriptAdapterFactory
具有BindingsValuesProvider
传递给DefaultSlingScript
. 其中一个实现BindingsValuesProvider
是AEMSightlyBindingsValuesProvider
(您可以在 中将其视为服务/system/console/services
),它提供了默认对象。
然后DefaultSlingScript
负责调用SightlyScriptEngine
和调用它的方法,该方法eval
填充绑定中的默认对象,然后将此绑定设置为请求属性。