@Inject in Sling Models — AEM as a Cloud Service
This pattern is executed by the code-assessment runbook — follow
../references/runbook.mdfor 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
*.javafile whose class is annotated@Model, with at least one field annotated@Inject. - Constructor-parameter and setter-method
@Injectare out of scope (trigger the file-level skip).
Discovery
Detection is performed by the analyzer (../scripts/analyze.sh), run by
the runbook:
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 -
@Namedmerged into the new annotation'sname;@Default/@Viapreserved -
@Optional→ per-fieldinjectionStrategy = InjectionStrategy.OPTIONAL(never a class-leveldefaultInjectionStrategychange) - 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 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.