jed*_*atu 5 java apache osgi sling aem
Adobe AEM软件提供了几个类,可以使用apache Sling Resource并将其调整到另一个类,如下所示:
Page page = resource.adaptTo(Page.class);
Run Code Online (Sandbox Code Playgroud)
要将此语法与您创作和控制的类一起使用,可以归结为简单地实现Adaptable接口.
但是,如果要启用资源以适应新的自定义类,您似乎必须实现AdapterFactory接口并在OSGI中注册它.
这是Adobe网站描述它的方式:
通过AdapterFactory,它可以映射任意对象.对象必须仍然实现Adaptable接口,并且必须扩展SlingAdaptable(它将adaptTo调用传递给中央适配器管理器). 这允许钩子进入现有类的adaptTo机制,例如Resource.
我已经浏览了SlingScriptAdapterFactory代码,但最终我没有在这里连接点.基本上我想这样做:
MyClass myClass = Resource.adaptTo(MyClass.class);
Run Code Online (Sandbox Code Playgroud)
我是否创建了一个实现AdapterFactory的类,并简单地将其与包一起部署,期望Sling只是按类型找到它或者还有更多它?
小智 5
这是一个更好的文档https://sling.apache.org/documentation/the-sling-engine/adapters.html
因此,您应该实现 Adaptable 接口,正如您已经描述的那样。然后创建一个正确注释的 AdapterFactory:
@Component
@Service(value=org.apache.sling.api.adapter.AdapterFactory.class)
@Properties({
@Property(name = "adaptables", value = { "org.apache.sling.api.resource.Resource" }),
@Property(name = "adapters", value = { "org.sling.MyClass" })
})
public class MyAdapterFactory implements AdapterFactory{
public <AdapterType> AdapterType getAdapter(final Object adaptable, Class<AdapterType> type){
return new MyClassAdapter(adaptable);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3419 次 |
| 最近记录: |