我想将一个@SliceResource的模型类初始化为Osgi服务。 有没有办法做到这一点?谢谢!
答案 0 :(得分:1)
在使用Slice的AEM项目中,获取OSGi服务中对象图形的惯用方法是获取对Injector的引用。
try (InjectorWithContext injector = InjectorUtil.getInjector(INJECTOR_NAME, resolver)) {
final ModelProvider modelProvider = injector.getInstance(ModelProvider.class);
MyModel myModel = modelProvider.get(MyModel.class, knownResource);
//do something with the model
}
请记住,这不仅可以用于实例化使用@SliceResource
注释的类,还可以使用Guice作为依赖注入框架来构建对象的任意图形。它是一个非常强大的工具,允许您管理各种对象,可能在不同的注入上下文中(更多信息here)
请记住,一旦完成使用,需要关闭注射器。幸运的是,InjectorWithContext
接口扩展了AutoCloseable
接口,因此您可以在try-with-resources块中使用它,如上所示。
使用InjectorUtil
获取进样器。可以在实例化Injector的INJECTOR_NAME
中找到Activator
,并注册接口和实现之间的绑定。
ModelProvider#get
允许您在第二个参数指定的上下文中注入模型。这可以是Resource
实例或路径。