在osgi服务中初始化切片资源

时间:2018-02-28 16:59:45

标签: slice aem osgi-bundle

我想将一个@SliceResource的模型类初始化为Osgi服务。 有没有办法做到这一点?谢谢!

1 个答案:

答案 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实例或路径。