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