BeanInfo-Generierung via Annotations

vorhergehende Artikel in: Java Komponenten Git(lab|hub)
05.01.2018

Nachdem ich mich von Netbeans als IDE losgesagt und Idea in der Community Edition zugewandt habe, vermisste ich eigentlich nur eins: den schönen clicky-bunty-Editor für BeanInfo-Klassen. Daher die Idee, so etwas über Annotations zu realisieren...

Die bisherige Lösung dafür war eher eine Krücke - sie erzeugte zwar eine BeanInfo-Klasse, allerdings war diese nur wenig mehr als ein Skelett. Danach war noch einige Handarbeit angesagt, damti eine sinnvolle BeanInfo daraus wurde. Aber noch erschwerender war sicher die Tatsache, dass man eine einmal generierte und angepasste BeanInfo davor schützen musste, dass noch einmal "drüber generiert" wird - dadurch wären nämlich alle Anpassungen verlorengegangen.

Das ist besonders in Fällen hinderlich, in denen einer Bean neue Properties hinzugefügt werden: Dann muss man entweder die bestehende BeanInfo doch von Hand weiterpflegen oder nochmals generieren und darauf hoffen, dass man die händisch vorgenommenen Anpassungen durch ein kompetentes Merge-Werkzeug in die neue BeanInfo übernehmen kann.

Das Ziel musste also sein, die BeanInfo-Annotations so zu erweitern, dass alle Aspekte in einer BeanInfo-Klasse über Annotations abbildbar waren. Diese Aspekte mussten dann in einem weitaus umfassenderen Velocity-Template berücksichtigt und umgesetzt werden. Damit erübrigt sich jegliche Anpassung der generierten BeanInfo.

Damit dies wirklich so bleibt, wurde ein wenig weiter gedacht: Die BeanInfos sind inhärent multilingual: Es ist möglich, ein ResourceBundle anzugeben, das in der generierten BeanInfo benutzt wird. An allen Stellen, an denen ein String erwartet wird, kann per Annotation-Attribut auch ein String genutzt werden, der ein gültiges Java-Quelltextfragment darstellt und nach Auswertung einen String ergibt. Bestes Beispiel dafür ist die Internationalisierung: statt "huhu" kann man einfach schreiben:

i18n.getString("huhu");

Dieser Code wird an der entsprechenden Stelle in die BeanInfo generiert und erzeugt dann einen String, statt das vorgegebene StringLiteral nutzen zu müssen.

Eine weitere Facette dient der Abrundung: In einigen Positionen der BeanInfo-Klasse ist ein Exception-Handling nötig: dafür existiert ein weiteres Annotation-Attribut, das ebenfalls wieder ein gültiges Java-Quelltextfragment enthalten muss - in diesem Fall wird es statt des Standard-Exception-Handling eingesetzt.

Alle benötigten Klassen und Ressourcen werden in einem Github-Repository veröffentlicht werden.

Ein Ausblick sei an dieser Stelle noch gestattet: Es wäre schön, wenn man aus den Annotations Runtime-Annotations machen könnte: dann wäre es möglich, ohne BeanInfo generieren zu müssen die BeanInfo über eine Introspector-Fassade direkt zur Laufzeit zu erzeugen.

Aktualisierung vom 5. Januar 2018

Das versprochene GitHub-Repository wurde eingerichtet.

Artikel, die hierher verlinken

Maven-Archetype für dWb+ Module

16.04.2018

Nachdem ich bereits ein GitHub-Repository für die Beispiele aus dem Kochbuch für dWb+ veröffentlicht habe, folgt nun hier ein Archetype zur entwicklung eigener Module

BeanInfo durch Runtime-Annotations

12.02.2018

Wie bereits in einem früheren Artikel ausgeführt wollte ich untersuchen, ob es möglich wäre, BeanInfos per Annotations bereitzustellen, die über eine Fassade direkt zur Laufzeit ermittelt werden könnten, ohne explizite BeanInfo-Klassen zu benötigen

GitHub Repository für BeanInfo Generator

21.01.2018

Wie bereits in einem früher veröffentlichten Artikel angekündigt wurden die Dateien zur Erzeugung vollständiger BeanInfos in einem GitHub-Repository veröffentlicht.

Alle Artikel rss Wochenübersicht Monatsübersicht Github Repositories Gitlab Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Bildverwaltung automatisiert

    17.10.2016

    Wer sich auch schon einmal darüber geärgert hat, daß die Foto-"Management"-Software Ordner erzeugt, die einen Unterordner enthalten, die einen Unterordner enthalten ..., der kann unter Umständen von dem hier vorgestellten Skript profitieren.

    Weiterlesen...

Neueste Artikel

  • Precision Time Protocol

    Durch meinen Neffen wurde ich neulich auf ein Video im Internet aufmerksam gemacht, aus dem ich von der Existenz des Protokolls PTP oder Precision Time Protocol erfuhr. Hier einige Gedanken dazu

    Weiterlesen...
  • In eigener Sache: Erdös-Distanz

    Neulich fand ich eine Webseite, die widerstreitende Gefühle in mir wachrief

    Weiterlesen...
  • Datei verschlüsseln mit LUKS/dmcrypt

    Ich habe hier bereits öfter über die Einrichtung und Konfiguration von PKI bzw. CS gesprochen. Beides benötigt für die sensiblen Daten nicht wirllich viel Platz - allerdings wäre es schön, wenn diese Daten besonders geschützt wären...

    Weiterlesen...

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muß damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen GitHub-Repositories findet man hier.