1

给出了 2 个 Sling 模型,我想注入其中一个。这是否可以通过注释实现,或者我是否需要创建 PostContruct 方法作为解决方法?

例子:

A型

@Model(adaptables = Resource.class)
public class ModelA { 
   @ValueMapValue(name = "jcr:title", injectionStrategy = InjectionStrategy.OPTIONAL)
   private String title;

   @Inject // Not working! 
   private ModelB modelB;
}

B型

@Model(adaptables = Resource.class)
public class ModelB { 
   @ValueMapValue(injectionStrategy = InjectionStrategy.OPTIONAL)
   private String text;

}
4

2 回答 2

5

从 Sling Models 的 1.1.0 版本开始,您可以使用@Self注解来注入可以从当前可适应的模型中调整的模型。在这种情况下,Resource来自ModelA

注入自适应对象本身(如果字段的类匹配或者是超类型)。如果存在@Self 注释,它会尝试使可适应字段类型适应。

@Model(adaptables = Resource.class)
public class ModelA { 
   @ValueMapValue(name = "jcr:title", injectionStrategy = InjectionStrategy.OPTIONAL)
   private String title;

   @Inject // This should works
   @Self
   private ModelB modelB;
}
于 2016-09-23T09:39:41.450 回答
0

您将无法将 ModelB 注入 ModelA,您可以做的是获取 ModelA 中的资源实例并将其适配到 ModelB

@Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class ModelA { 
   @Inject
   @Via("resource") 
   @Named("jcr:title")
   private String title;

   @Inject 
   private Resource resource;

  @PostConstruct
  public void init() {
   final ModelB modelb = resource.adaptTo(ModelB.class);
   }
}
于 2016-09-20T14:13:20.633 回答