Inject In Sling Model

adobe/skills/plugins/aem/cloud-service/skills/code-assessment/inject-in-sling-model

作者 adobe940b8795c0dfApache-2.0197 个星标收录于 2026年10月9日更新于 2026年10月8日仓库今天更新

AEM Cloud Service expert skill — migrate javax.inject.@Inject fields in Sling Model (@Model) classes to injector-specific annotations (@ValueMapValue / @OSGiService / @SlingObject). Self-discoverable (scan for @Model classes with field-level @Inject); the replacement is chosen deterministically from each field's declared type. Use for "fix @Inject in HeroModel.java", "modernize my Sling Models", or when scanning an AEM project for @Inject misuse. Detailed decision table, companion-annotation handling, import management, and file-level skip policy are in recipe.md.

AI 生成的概览

将 AEM Sling Model 类中的 javax.inject @Inject 字段迁移为注入器专用注解。

功能
该技能为 AEM as a Cloud Service 项目提供检测标准与迁移配方:识别带有字段级 @Inject 注解的 @Model 类,并将每个注解替换为注入器专用注解,如 @ValueMapValue、@OSGiService 或 @SlingObject。替换注解依据字段声明的 Java 类型通过决策表确定,同时处理 @Named、@Default、@Via、@Optional 等伴随注解并更新导入。它仅提供说明,产出为修改后的 Java 源文件,不进行提交。
适用场景
适用于在 AEM 项目中现代化改造 Sling Model 的场景,例如修复某个模型类中的 @Inject 用法,或扫描项目中的 @Inject 误用。它针对 @Model 类中的字段级 @Inject;构造参数和 setter 方法上的 @Inject 不在范围内,会触发文件级跳过。
运行要求
需要一个包含 Sling Model 类的 AEM Java 项目,以及所属技能集合中引用的分析脚本和运行手册;该技能本身不附带脚本,未说明需要凭据或网络访问。

@Inject in Sling Models — AEM as a Cloud Service

This pattern is executed by the code-assessment runbook — follow ../references/runbook.md for the full flow (preflight → plan → apply → verify, run log). This skill supplies the detection + recipe the runbook applies.

Overview

javax.inject.@Inject on fields of @Model classes is discouraged by the Apache Sling Models documentation. Removing @Inject without a replacement breaks injection, so each field is migrated to an injector-specific annotation chosen from its declared type.

Classification — confirm this pattern applies

  • A *.java file whose class is annotated @Model, with at least one field annotated @Inject.
  • Constructor-parameter and setter-method @Inject are out of scope (trigger the file-level skip).

Discovery

Detection is performed by the analyzer (../scripts/analyze.sh), run by the runbook:

bash
bash ../scripts/analyze.sh <workspace-root> --pattern inject-in-sling-model

Match criteria (what the detector flags): a class annotated @Model (org.apache.sling.models.annotations.Model, confirmed import-aware) with at least one field annotated @Inject (javax.inject.Inject or jakarta.inject.Inject). One finding per matching field. Constructor/setter @Inject and non-@Model classes are not flagged. The replacement annotation is chosen from the field's declared type by the decision table in recipe.md.

Resolution contract

self-evident — the replacement annotation is fully determined by the field's declared Java type via the decision table in recipe.md. No external input is required.

Review checklist

  • Each migrated field maps to exactly one injector-specific annotation per the decision table
  • Sling objects (Resource / ResourceResolver / request / response) → @SlingObject, not @Self
  • @Named merged into the new annotation's name; @Default / @Via preserved
  • @Optional → per-field injectionStrategy = InjectionStrategy.OPTIONAL (never a class-level defaultInjectionStrategy change)
  • Unused imports removed; new imports added and ordered per the file's convention
  • File-level skip respected — no partial migration of a file with any ambiguous field

Recipe

Read recipe.md [blocked] in full before editing: input contract, decision table, companion annotations, import management, unlocatable / skip-file policy, per-file procedure, before/after example, editing strategy.

Handoff

The skill never commits. See ../references/git-workflow.md for git vs in-place handoff and the suggested commit message.

来源与署名

来源:adobe/skills位于plugins/aem/cloud-service/skills/code-assessment/inject-in-sling-model提交940b879

许可证: Apache-2.0

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架