Eigene Annotations, Pre-/Post-/Call-Method

  • Themenstarter koryphaeesatara
  • Beginndatum
K

koryphaeesatara

Mitglied
Das Ziel ist es 3 Annoations zu schreiben, die je nachdem vor oder nach einen Methodenaufruf eine andere Methode aufruft. Mein Problem ist nur, dass ich zwar mit Annotations arbeite ( Spring Boot, JPA, Lombok, ... ) aber noch nie eigene geschrieben habe. Bin da nicht so sehr spezalisiert in Java.

Deswegen bitte ich einen erfahreneren Programmierer mir mal ein Beispiel Prozessor zu schreiben wie das funktionieren könnte. Dürfte ja kein großer Aufwand sein.

Anforderung: Das Method-Calling sollte/ braucht eigentlich nur innerhalb einer Klassenstruktur(mit Vererbung) funktionieren und mit einer id.

Wieso das ganze? Ich weiß, man kann auch einfach die Methode in der Methode aufrufen, aber da ich mit Lombok arbeite (@Getter, @Setter) und bei jeder Setter-Methode die andere Methode aufgerufen werden soll.


Java:
public class Example{
  
  private Object object;
  ....

  @PostMethod("method-id")
  public void setObject(Object object){
    ...
  }

  //Es dürfen keine Parameter verwendet werden.
  @CallMethod("method-id")
  private void save(){
    ...
  }
Java:
@Setter(onMethod={@PostMethod})
public class Example{
   
  private Object object;
  ....

  //Es dürfen keine Parameter verwendet werden.
  @CallMethod("method-id")
  private void save(){
    ...
  }
Java:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface PreMethod {
    String method();
}
Java:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface PostMethod {
    String method();
}
Java:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface CallMethod {
    String method();
}
Java:
//Quelle: http://icancode.de/3448/eigene-java-annotations-teil-1 abgewandelt
@SupportedAnnotationTypes({"CallMethod", "PostMethod", "PreMethod"})
public class CallMathodProcessor extends AbstractProcessor {


    // utils
    Types types;
    Elements elems;

    @Override
    public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
        return false;
    }

    private void processAnnotation(Element method, Messager msg) {
        final CallMethod ann = method.getAnnotation(CallMethod.class);
        // check basic properties
        if (method.getKind() != ElementKind.METHOD) {
            error("annotation only for methods", method);
        }
        // check types
        final ExecutableType emeth = (ExecutableType) method.asType();
        if (not(emeth.getReturnType().getKind().equals(TypeKind.BOOLEAN))) {
            error("annotated Element must have return type boolean", method);
        }
        if (emeth.getParameterTypes().size() != 1) {
            error("annotated Element must have exactly one parameter", method);
        } else {
            final TypeMirror param0 = emeth.getParameterTypes().get(0);
            final TypeMirror string = elems.getTypeElement(String.class.getCanonicalName()).asType();
            final boolean isSame = types.isSameType(param0, string);
            if (not(isSame)) {
                error("annotated Element must have exactly one String parameter", method);
            }
        }

    }
    /** @param where will be used to present a position hint in the compiler message,  if null its a position-less message */
    void error(String msg, Element where) {
        processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, msg, where);
    }
    private static boolean not(boolean val) { return !val; }

}
 
Flown

Flown

Administrator
Mitarbeiter
Was du haben möchtest nennt sich AOP (Aspect Oriented Programming) und wird von AspektJ z.B. implementiert.

Einen kleinen Teil könnte man mit Proxy machen, aber wieso das Rad immer neu erfinden.
Deswegen bitte ich einen erfahreneren Programmierer mir mal ein Beispiel Prozessor zu schreiben wie das funktionieren könnte. Dürfte ja kein großer Aufwand sein.
Wenn es kein großer Aufwand wäre, dann könntest du es eben selbst machen?
Bei genauerer Problemstellung kannst du gegen Entgeld gerne um konkrete Hilfe/Implementierung bitten.
 
K

koryphaeesatara

Mitglied
AspectJ kannte ich noch nicht, aber wenn AspectJ sowas kann dann hab ich doch schon meine Lösung.

Wenn es kein großer Aufwand wäre, dann könntest du es eben selbst machen?
Wenn ich mich in die Problematik der Annotationprogrammierung einarbeiten würde, dann nicht aber ich wollte mich halt nicht erstmal Stundenlang mit Annotationprogrammierung rumärgern für ein bisschen Schreibfaulheit.
 
H

httpdigest

Top Contributor
So etwas wie "Annotationprogrammierung" gibt es nicht. Das ist wie "Instanzvariablenprogrammierung" oder "Methodenparameterprogrammierung". Annotationen sind an sich ja nichts besonderes. Nur Java-Klassen mit spezieller Syntax, um sie an andere Syntaxelemente von Java anzuheften. Und mehr auch nicht.
Das, was sie nützlich/nutzbar machen, ist z.B. die ja bereits von @Flown erwähnte aspektorientierte Programmierung oder z.B. Reflection.
 
K

koryphaeesatara

Mitglied
So etwas wie "Annotationprogrammierung" gibt es nicht. Das ist wie "Instanzvariablenprogrammierung" oder "Methodenparameterprogrammierung".
Ich geb es zu ich hätte es auch in Anführungsstrichen schreiben sollen um mein Unwissen in der Fachsprache kenntlich zu machen.
Soweit ich weiß gibt es aber auch nur in Java so eine Handhabung mit Annotation.
Da fehlt doch nur noch "Klassenprogrammierung", was eigentlich nur ein doofes Wort für OOP wäre.
 
H

httpdigest

Top Contributor
C# (bzw. .Net CIL) hat auch Annotations (gleiches Konzept), nur nennen sie sie dort "Attributes".
TypeScript hat so etwas ähnliches (zumindest von der Syntax her - und hoffentlich bald ECMAScript Standard), und sie nennen es "Decorators".
Generell fällt so etwas in den Bereich der Metaprogrammierung.
 
K

koryphaeesatara

Mitglied
Interessant zu wissen, man lernt halt nie aus.
Da weiß ich zumindest womit ich mich mal beschäftigen kann.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Attribut Telefonnummer - eigene Klasse oder String Java Basics - Anfänger-Themen 13
BestGoalkeeper JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
S Eigene LinkedList Klasse Java Basics - Anfänger-Themen 4
I Eigene Java Tools Nutzung Java Basics - Anfänger-Themen 6
G eigene Bibliothek einbinden Java Basics - Anfänger-Themen 1
O Erste Schritte Eigene charAt(i) Methode schreiben Java Basics - Anfänger-Themen 10
D Methoden Eigene Methode um alle Ausgaben aufzurufen Java Basics - Anfänger-Themen 17
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
P Maven und eigene Jars Java Basics - Anfänger-Themen 4
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
A Eigene Methoden entwicken Java Basics - Anfänger-Themen 3
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
H GSON-Bibliothek für eigene Programme benutzen Java Basics - Anfänger-Themen 2
H Klassen auf eigene Klasse zugreifen Java Basics - Anfänger-Themen 2
N Eclipse - eigene Icons unter ClassPath Resource Java Basics - Anfänger-Themen 0
N Eigene Stream Methoden implementieren Java Basics - Anfänger-Themen 3
R eigene Graphikbedienelemente Java Basics - Anfänger-Themen 8
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
T Eigene Bedingung in IF-Bedingung Java Basics - Anfänger-Themen 22
P Java 8 & Eigene Applets Java Basics - Anfänger-Themen 3
E Best Practice Exaktes Rechnen mit (Pseudo-)Rationalen/Realen Zahlen. Operations Zuweisung für (eigene) Klassen Java Basics - Anfänger-Themen 3
G eigene Bibliothek in Java importieren Java Basics - Anfänger-Themen 5
D Klassen Eigene Klasse für ArrayList Java Basics - Anfänger-Themen 6
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
P Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
J Eigene Klasse für die Variablen? Java Basics - Anfänger-Themen 3
P Eigene Knöpfe mit eigenem Listener Java Basics - Anfänger-Themen 5
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
T Muss ein Parametertest immer eine eigene Testklasse sein? Java Basics - Anfänger-Themen 3
B Multithreading und eigene Queue entwickeln Java Basics - Anfänger-Themen 3
O GUI: Eigene Fenster "Form"? Java Basics - Anfänger-Themen 13
F Eigene LinkedList - toString Java Basics - Anfänger-Themen 10
O Denkanstöße für eigene Konfigurations-Datei Java Basics - Anfänger-Themen 12
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
C eigene Exception Java Basics - Anfänger-Themen 4
M externe JARs in die eigene JAR einbinden Java Basics - Anfänger-Themen 9
V Klassen import - einfaches Umleiten auf eigene Klassen? Java Basics - Anfänger-Themen 8
S Eigene Exception Klasse - fehlender Konstruktor mit String Java Basics - Anfänger-Themen 3
B eigene klasse in listen eintragen Java Basics - Anfänger-Themen 6
A Objekte in eigene Klasse auslagern Java Basics - Anfänger-Themen 2
S [JavaFX 2.1] - Eigene Sprachauswahl? Java Basics - Anfänger-Themen 4
K Klassen Eigene Exception verwenden Java Basics - Anfänger-Themen 9
J eigene packages bzw klassen verwenden Java Basics - Anfänger-Themen 25
E Eigene Stackklasse Java Basics - Anfänger-Themen 7
B Eigene Exceptions entwerfen Java Basics - Anfänger-Themen 3
S Eigene Exception Schreiben und Welche Auslösen wie ? Java Basics - Anfänger-Themen 7
P eigene kleine Datenverwaltung Java Basics - Anfänger-Themen 5
N Eigene Methoden-> Werte übergeben Java Basics - Anfänger-Themen 5
U Klassen Eigene Klassen importieren Java Basics - Anfänger-Themen 13
Kenan89 ActionListener in eigene Klasse Java Basics - Anfänger-Themen 8
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
S Eigene Klassen addieren Java Basics - Anfänger-Themen 3
B OOP Eigene Objekte in Arrays zusammenfassen Java Basics - Anfänger-Themen 3
E Eigene class datum Java Basics - Anfänger-Themen 2
G Eigene MessageBox kreieren Java Basics - Anfänger-Themen 9
I Erste Schritte Eigene Fehlermeldungen bei Exceptions Java Basics - Anfänger-Themen 19
F Klassen Eigene Klasse definieren Java Basics - Anfänger-Themen 4
S Eigene KeyEvent-Mask erstellen Java Basics - Anfänger-Themen 4
X Eigene Libary Java Basics - Anfänger-Themen 2
Crashbreaker Eigene Java-Programm ohne hilfe des CMD starten Java Basics - Anfänger-Themen 11
A Klassen Eigene Datenklasse - Strings mit fixer Länge Java Basics - Anfänger-Themen 2
T eigene Exception Klasse Java Basics - Anfänger-Themen 12
G Shape um eigene Achse drehen Java Basics - Anfänger-Themen 2
P Vererbung Basisklasse soll eigene Methode benutzen Java Basics - Anfänger-Themen 38
F Eigene Klasse für die Keys von HashMap Java Basics - Anfänger-Themen 5
J Eigene kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
G Eigene Klasse als Array, zugriff? Java Basics - Anfänger-Themen 2
xehpuk Ordner "Eigene Bilder" ansteuern Java Basics - Anfänger-Themen 3
V Sonderzeichen als eigene "Operatoren" im JTextField Java Basics - Anfänger-Themen 4
S Eigene Stack Klasse Java Basics - Anfänger-Themen 26
D Eigene equals methode schreiben Java Basics - Anfänger-Themen 4
dataframe OOP Eigene typisierte Liste Java Basics - Anfänger-Themen 3
W GUI als eigene Klasse oder in die Startklasse? Java Basics - Anfänger-Themen 21
T Konstruktor für eigene Klasse erstellen Java Basics - Anfänger-Themen 6
H Buttonbefehle in eigene Klasse schreiben Java Basics - Anfänger-Themen 8
M Datentypen Eigene iterierbare Liste Java Basics - Anfänger-Themen 4
G Eigene Klasse für externe Befehle - Warten auf Prozesse Java Basics - Anfänger-Themen 6
S Klassendiagramm - nur eigene Klassen? Java Basics - Anfänger-Themen 3
nrg Eigene simple List-Klasse programmieren Java Basics - Anfänger-Themen 3
C Eigene Interpreter-Programmiersprache mit Java Java Basics - Anfänger-Themen 17
B eigene Exception.... Java Basics - Anfänger-Themen 5
N Java Programm soll Datei in eigene jar schreiben Java Basics - Anfänger-Themen 13
F Eigene Exception StackTrace und Message ist leer warum??? Java Basics - Anfänger-Themen 3
M Eigene Pakete in Eclipse erstellen Java Basics - Anfänger-Themen 5
M Eigene Hash Funktion Java Basics - Anfänger-Themen 5
O Eigene Exceptions Java Basics - Anfänger-Themen 11
H eigene Schriftarten registrieren Java Basics - Anfänger-Themen 5
Kasoki Eigene Funktionen / Commands Java Basics - Anfänger-Themen 14
M Eigene LinkedList und Nodes Java Basics - Anfänger-Themen 20
S eigene Methoden in JDialog Java Basics - Anfänger-Themen 13
K eigene Hash-Datenstruktur Java Basics - Anfänger-Themen 2
A Eigene Klassen Datein? Java Basics - Anfänger-Themen 8
M Eigene Fehlermeldung bei Exceptions? Java Basics - Anfänger-Themen 12
S Eigene Events werfen? Java Basics - Anfänger-Themen 6
M eigene Property-Klasse Java Basics - Anfänger-Themen 2
SebSnake Operatoren für eigene Datentypen Java Basics - Anfänger-Themen 3
B Wie kann ich eigene Pakete nutzen? Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Anzeige

Neue Themen


Oben