Verwendung von benutzerdefinierten Typanmerkungen in Java

9

Java 8 hat eine Funktion namens Typ-Annotationen ( JSR 308 ) . Ich würde es gerne für ein einfaches Objekt-zu-Objekt-Mapper-Framework verwenden. Ich möchte Annotation @ExpectedType wie folgt definieren

%Vor%

Und dann benutze es in meinem Code wie folgt:

%Vor%

IObjectA ist eine Schnittstelle, die von den Klassen ObjectA_DTO und ObjectA_Entity implementiert wird. Der Service würde ich gerne so nutzen:

%Vor%

Ich möchte den Aufruf von SomeServiceImpl-Methoden ändern, um den Object-Mapper zu verwenden. Es könnte durch generierten Code mit JSR 269 oder durch AOP erreicht werden.

Das Problem ist, dass ich einen einfachen Annotationsprozessor geschrieben habe, der keinerlei Typannotationen behandelt. Die Quelle des einfachen Annotationsprozessors sieht folgendermaßen aus:

%Vor%

Irgendwelche Ideen, wie Sie mit Hilfe von SimpleAnnotationsProcessor auf Typ-Annotationen zugreifen können? Die Verwendung der Pluggable Annotation Processing API ist für mich nicht notwendig. Ich denke, sie hätte eine bessere Leistung als Java Reflection. Wie auch immer, ich weiß nicht, wie ich über Java Reflection auf den Typ Annotation zugreifen kann.

    
Boris Šuška 22.12.2014, 16:40
quelle

3 Antworten

2

Ich bin mir nicht sicher, ob ich verstehe, was Sie erreichen wollen, aber hier ist ein Beispiel, wie Sie mit der Java-Reflektions-API auf Ihre Anmerkungen zugreifen können:

%Vor%

Die Ausgabe sieht so aus:

%Vor%

Beachten Sie jedoch, dass nicht alle möglichen Typ-Anmerkungen über die Reflektions-API zugänglich sind, aber Sie können sie bei Bedarf immer aus dem Byte-Code lesen (siehe meine Antwort hier ).

    
Balder 05.01.2015, 14:39
quelle
0

Ich denke, Sie vermischen die Verwendung von Anmerkungen zur Laufzeit gegen die Verwendung derselben zur "Kompilierzeit" durch verschiedene Tools. Processor interface ist für die Verwendung in Tools (Compiler, Javadoc-Generator), nicht in Ihrem Laufzeitcode.

    
Arkadiy 05.01.2015 14:47
quelle
0
%Vor%

@SearchDefinition - kann überall verwendet werden

    
Jango 05.01.2015 15:16
quelle