Der standardmäßige `@Qualifier` von Spring basiert auf einfachen Zeichenketten, die anfällig für Tippfehler und Refactoring-Probleme sind. Durch Anwenden von `@Qualifier` als Meta-Annotation auf einer benutzerdefinierten Java-Annotation mit einem Enum-Attribut etablieren Sie eine stark typisierte, zur Compilezeit geprüfte Dependency-Resolution für Beans mit identischer Schnittstelle. Die Autowiring-Engine von Spring wertet diese Annotationen an Injektionspunkten aus, um passende Implementierungen eindeutig zuzuordnen.
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Qualifierpublic @interface StorageBackend {Medium medium();enum Medium {RELATIONAL_PRIMARY,ANALYTICS_REPLICA}}@Service@StorageBackend(medium = StorageBackend.Medium.ANALYTICS_REPLICA)class AnalyticsQueryService implements QueryService {}@Componentclass MetricsDashboard {private final QueryService queryService;public MetricsDashboard(@StorageBackend(medium = StorageBackend.Medium.ANALYTICS_REPLICA) QueryService queryService) {this.queryService = queryService;}}