Autoproxing mit Spring
Das Applikation Framework Spring bringt ein sehr nützliches Feature mit: Autoproxing. Damit lassen sich Spring Beans – also eigentlich jede POJO-Klasse – um Aspekte erweitern. Aspekte sind gemäss AOP Belange eines Programms die sich quer zur eigentlichen Programmlogik erstecken (Cross-Cutting-Concerns).
In der Aspektorientierten Programmierung kann man diese Aspekte getrennt vom Rest des Programms formulieren und erst die AOP Umgebung "verwebt" den Aspektcode mit dem eigentlichen Programmcode. Hier gibt es prinzipiell zwei unterschiedliche Vorgehensweisen 1. zur Compile-Time (während des Kompilierens) oder 2. zur Run-Time (während der Laufzeit).
Der bekannteste Vertreter der 1. Variante ist sicher AspectJ, welches eine eigene Sprache formuliert und folglich auch einen eigenen Compiler mitbringt. Dieser Compiler sorgt für das Zusammenweben von Aspekten und restlichem Programmcode. Die Sprache liefert alle Mittel um Aspekte zu formulieren und darüber hinaus festzulegen an welchen Stellen der Aspect-Code eingebunden werden muss (Definition von sogenannten Pointcuts).
Beim Spring-Framework wird der Aspect-Code erst zur Laufzeit dem restlichen Programm hinzugefügt. Wie kann man sich das vorstellen? Da Spring Bean-Instanzen immer über die BeanFactory erzeugt werden, kann die Factory die erzeugten Instance beliebig verändern, solange sie für die Applikation nur "so aussehen" wie eine Bean vom Type XY. Bei Beans die ein bestimmtes Interface implentieren, bedeutet das, das die erzeugte Instance eben immer noch diese Interface implementieren muss. Wird kein Interface implementiert, so wird eine abgeleitete Klasse mindestens die gleichen "Public-Methods" bieten, wie die Basis-Klasse.
Weiterlesen →