Einen schönen Ansatz zur Vermeidung des dadurch entstehenden Overheads bietet der Einsatz von AOP zur Überprüfung der Übergabewerte an eine Methode. Wie das ganze in einem Spring 3 Umfeld funktionieren kann, wird an einem konkreten Beispiel gezeigt.
Das Beispiel baut auf einem einfachen Taschenrechner mit den vier Grundrechenarten auf. Dieser wird als Service veröffentlicht und kann von anderen Beans als Referenz injected werden. Der Validator für die null Werte in Methoden wird ebenfalls als Bean bereitgestellt und definiert einen entsprechenden Pointcut zur Überprüfung.
Vergrößern durch Anklicken |
Die Überprüfung jeder Methode nach dem gleichen Schema macht nicht immer Sinn, somit wurde eine Annotation definiert, die eine Methode für die Überprüfung markiert. Somit besteht die Möglichkeit den Pointcut innerhalb des Validators so zu definieren, dass dieser auch ausschließlich bei Methoden mit dieser Annotation ausgeführt wird und sonst inaktiv bleibt. So werden unnötige Operationen vermieden und ausschließlich durch den Entwickler definierte Überprüfungen durchgeführt. Das folgende Sequenzdiagramm zeigt den Ablauf anhand eines Methodenaufrufs durch den Test.
Vergrößern durch Anklicken |
Vergrößern durch Anklicken |
Wünschenswert wäre an dieser Stelle sicherlich eine Angabe des Parameternamens für den null angegeben worden ist. Da ist aber leider eine Einschränkung durch Java selbst gegeben, da die Parameternamen im Bytecode nicht mehr zur Verfügung stehen und somit auch nicht für den Validator zugänglich sind. Einzige Möglichkeit wäre, dass der komplette Code mit Debug-Flag kompiliert wird. Dann wären auch die Namen der Parameter zugänglich. Für produktive Umgebungen aber sicherlich keine so gute Idee ;-)
Um nun die Validierung zu aktivieren, muss nur die entsprechende Annotation an der Methode angebracht werden. Mit einem sprechenden Namen kann jeder Entwickler recht schnell erkennen, was genau mit dieser Annotation ausgelöst wird.
Vergrößern durch Anklicken |
Der Test der Lösung wird wieder durch einen einfachen Spring-JUnit-Test durchgeführt. Die erwartete Exception ist an dieser Stelle natürlich die NullParameterException, die durch den Validator ausgelöst wird.
Vergrößern durch Anklicken |
Keine Kommentare:
Kommentar veröffentlichen