Wie kann ich eine benutzerdefinierte Java -Annotation wie Lomboks @Getter/ @Setter erstellen, jedoch mit benutzerdefinieJava

Java-Forum
Anonymous
 Wie kann ich eine benutzerdefinierte Java -Annotation wie Lomboks @Getter/ @Setter erstellen, jedoch mit benutzerdefinie

Post by Anonymous »

Ich versuche, eine benutzerdefinierte Annotation in Java zu erstellen, die wie Lomboks @Getter und @Setter funktioniert, jedoch mit benutzerdefinierten Methodenkörpern für bestimmte Anwendungsfälle.

Code: Select all

@DecryptGetter
private String sensitiveData;
< /code>
Das würde Methoden erzeugen wie: < /p>
public void setSensitiveData(String data) {
this.sensitiveData = CryptoUtils.encrypt(data);
}

public String getSensitiveData() {
return CryptoUtils.decrypt(this.sensitiveData);
}
< /code>
Der Schlüsselunterschied von Lombok besteht darin, dass diese Methoden eine benutzerdefinierte statische Logik aufrufen sollten (Cryptils.encrypt () /decrypt ()), anstatt nur Accessors.@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.FIELD)
public @interface EncryptSetter {}

@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.FIELD)
public @interface DecryptGetter {}
Ich habe auch einen Annotationsprozessor implementiert, der diese Annotationen erkennt und eine separate Klasse mit Getter/Setter -Methoden erstellt, die die benutzerdefinierte Logik enthalten. Dies ist jedoch nicht ideal, da die Methoden nicht zur ursprünglichen Klasse hinzugefügt werden - stattdessen leben sie in einer separaten erzeugten Klasse, die den Zweck besiegt. häufig. Das manuelles Aufrechterhalten von Gettern und Settern ist fehleranfälliger und zeitaufwändig. /> Frage:
Ist es möglich, eine benutzerdefinierte Annotation wie @encryptsetter zu erstellen, die eine Methode in derselben Klasse erzeugt (wie Lombok)? /> AST-Modifikation (z. B. Javac-Plugins)?
Lomboks Erweiterungs-APIs? notwendig
bevorzugen leichte und wartbare Lösungen < /p < /p>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post