java / intermediate
Snippet
Erstellen benutzerdefinierter Meta-Annotations-Qualifier für typsichere Bean-Auflösung
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.
snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@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;}}
spring
Erklärung
1
@Qualifier
Kennzeichnet die benutzerdefinierte Annotation als Spring-Qualifier-Meta-Annotation zur Filterung von Bean-Kandidaten.
2
@StorageBackend(medium = StorageBackend.Medium.ANALYTICS_REPLICA)
Markiert eine konkrete Service-Komponente mit einem stark typisierten Qualifizierungsattribut.
3
public MetricsDashboard(@StorageBackend(medium = StorageBackend.Medium.ANALYTICS_REPLICA) QueryService queryService)
Erzwingt die Injektion ausschließlich der passend qualifizierten Implementierung in den Konstruktor.