0 Tage Serie
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)
@Qualifier
public @interface StorageBackend {
Medium medium();
enum Medium {
RELATIONAL_PRIMARY,
ANALYTICS_REPLICA
}
}
@Service
@StorageBackend(medium = StorageBackend.Medium.ANALYTICS_REPLICA)
class AnalyticsQueryService implements QueryService {}
@Component
class 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.