Aem 从Sling模型中注入另一个Sling模型

Aem 从Sling模型中注入另一个Sling模型,aem,sling,sling-models,Aem,Sling,Sling Models,给出了2个吊索模型,我想注射其中一个。这是否可以通过注释实现,还是需要创建一个PostContract方法作为解决方法 例如: A型 @Model(adaptables = Resource.class) public class ModelA { @ValueMapValue(name = "jcr:title", injectionStrategy = InjectionStrategy.OPTIONAL) private String title; @Inject /

给出了2个吊索模型,我想注射其中一个。这是否可以通过注释实现,还是需要创建一个PostContract方法作为解决方法

例如:

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;

}

您将无法将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);
   }
}

您将无法将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);
   }
}

由于1.1.0版本的Sling模型,您可以使用
@Self
注释来注入可根据当前版本进行调整的模型。在本例中,来自
ModelA
Resource

注入自适应对象本身(如果字段的类匹配或是超类型)。如果存在@Self注释,则会尝试根据字段类型调整该注释


由于1.1.0版本的Sling模型,您可以使用
@Self
注释来注入可根据当前版本进行调整的模型。在本例中,来自
ModelA
Resource

注入自适应对象本身(如果字段的类匹配或是超类型)。如果存在@Self注释,则会尝试根据字段类型调整该注释


ModelA
表示的资源是否是由
ModelA
表示的资源的子资源?不,它是同一个资源。因此,您有一个
ResourceA
,您希望同时将该资源适配到
ModelA
ModelB
?只要
ModelB
表示的资源是
ModelA
表示的资源的子资源,就可以执行您想要执行的操作。请参阅由
ModelA
表示的资源是否是由
ModelA
表示的资源的子资源?否,它是同一个资源。因此,您有一个
ResourceA
,您希望同时将该资源适配到
ModelA
ModelB
?只要
ModelB
表示的资源是
ModelA
表示的资源的子资源,就可以执行您想要执行的操作。看,是的,这就是我建议的解决办法。。。。没有别的办法可以避免吗@SlingObject也不起作用…它实际上不是一个解决方法,sling模型基于适配器,Inject更方便DI,不能调用适配器调用。如果您查看SlingModel的Sling代码,您将看到模型注释处理其他注释的方式,并且处于当前状态不会调用adaption通过adaption使用嵌套模型的概念从一开始就是Sling模型设计的一部分。在1.0中,我认为如果其他喷油器出现故障,会进行隐式尝试,然后在1.1中,会通过自我注释明确说明。是的,这就是我建议的解决方法。。。。没有别的办法可以避免吗@SlingObject也不起作用…它实际上不是一个解决方法,sling模型基于适配器,Inject更方便DI,不能调用适配器调用。如果您查看SlingModel的Sling代码,您将看到模型注释处理其他注释的方式,并且处于当前状态不会调用adaption通过adaption使用嵌套模型的概念从一开始就是Sling模型设计的一部分。在1.0中,我认为如果其他喷油器出现故障,则会隐式尝试,然后在1.1中,通过自注释明确说明,您甚至不需要指定
@Inject
@Inject
是通用喷油,其中@Self是喷油的特定形式。您甚至不需要指定
@Inject
@Inject
是泛型注入,其中@Self是注入的特定形式。