从 Sling Model 注入另一个 Sling 模型

nic*_*las 1 sling aem sling-models

给出了 2 个吊带模型,我想注射其中一个。这可以通过注释实现吗?还是我需要创建一个 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;
}
Run Code Online (Sandbox Code Playgroud)

B型

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

}
Run Code Online (Sandbox Code Playgroud)

小智 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 你甚至不需要指定``@Inject````,``@Inject```是通用注入,其中@Self是特定形式的注入。 (3认同)