© Excellent backgrounds/Shutterstock.com
Java Magazin
Teil 5: Dependency-Injection-Frameworks

Spritzen tun gar nicht weh

In den letzten Teilen der Artikelserie haben wir uns recht viel mit allen möglichen Arten von Proxys auseinandergesetzt und gezeigt, wie man all die dafür notwendigen Dinge programmieren kann. Aber wie so oft stellt sich nun die Frage, wie man das in sein Projekt einbinden kann.

Sven Ruppert


ArtikelserieTeil 1: Das Builder-Pattern im EinsatzTeil 2: Das Proxy-Pattern im EinsatzTeil 3: Das DynamicObjectAdapter-Pattern im EinsatzTeil 4: Typesafe DynamicObjectAdapterTeil 5: Dependency-Injection-Frameworks

Wir haben uns in den letzten Teilen dieser Serie mit den Proxys auseinandergesetzt. Begonnen hatten wir damit, Proxys manuell zu erstellen. Wir haben dabei gesehen, dass man diese auf Basis von Dynamic Proxys recht schnell realisieren kann. Später sind wir einen Schritt weiter gegangen und haben nicht ganze Instanzen maskiert, sondern nur noch einzelne Methoden. Das dazugehörige Pattern hieß DynamicObjectAdapter. Alles zusammen hat sich jedoch zu recht viel manueller Tätigkeit summiert, was dazu führte, dass wir uns das gute alte Annotation Processing angesehen haben, um so viel wie möglich zu generieren. Jetzt haben wir einen Haufen Proxys.

Wenn man sich nun in einer realen Umgebung mit den Proxys beschäftigt, kommt man natürlich zu den Stellen, an denen die Proxys erstellt werden. Hier ein Beispiel aus einem der ersten Artikel mit der Verwendung des ProxyBuilder [1].

Listing 1: Beispiel mit ProxyBuilderfinal InnerDemoClass original = new InnerDemoClass(); final InnerDemoInterface demoLogic = ProxyBuilder .newDynamicProxyBuilder(InnerDemoInterface.class, original) .addSecurityRule(() -> true) .addSecurityRule(() -> true) .addMetrics() .build();

Der Quelltext, um Proxys zu erstellen, ist recht kompakt, hat aber im Businesscode eigentlich nichts verloren. Daraus ergeben sich verschiedene Fragen, aber schauen wir erst einmal im Detail hin. Hier wird ein Proxy erzeugt, was direkt zu der offensichtlichen Frage führt: Wann wird überhaupt ein Proxy benötigt? Ist die Stelle, an der ich ihn im Quelltext vorsehe, immer die richtige Wahl? Bei trivialen Beispielen ist das schon der Fall, aber leider nicht immer. Also erweitern wir das Beispiel um eine unsinnige, aber beispielhafte Entscheidung, ob jetzt der richtige Zeitpunkt für einen Proxy ist.

Listing 2: Brauchen wir hier einen Proxy?final InnerDemoClass original = new InnerDemoClass(); if(proxyNeeded) { final InnerDemoInterface demoLogic = ProxyBuilder .newDynamicProxyBuilder(InnerDemoInterface.class, original) .addSecurityRule(() -> true) .addSecurityRule(() -> true) .addMetrics() .build(); return demoLogic;} else { return original;}

Und was ist mit der Komposition des Proxys selbst? Ist die Kombination aus SecurityProxy und MetricsProxy immer fix? Eine gute Frage. Extrahieren wir e...

Java Magazin
Teil 5: Dependency-Injection-Frameworks

Spritzen tun gar nicht weh

In den letzten Teilen der Artikelserie haben wir uns recht viel mit allen möglichen Arten von Proxys auseinandergesetzt und gezeigt, wie man all die dafür notwendigen Dinge programmieren kann. Aber wie so oft stellt sich nun die Frage, wie man das in sein Projekt einbinden kann.

Sven Ruppert


ArtikelserieTeil 1: Das Builder-Pattern im EinsatzTeil 2: Das Proxy-Pattern im EinsatzTeil 3: Das DynamicObjectAdapter-Pattern im EinsatzTeil 4: Typesafe DynamicObjectAdapterTeil 5: Dependency-Injection-Frameworks

Wir haben uns in den letzten Teilen dieser Serie mit den Proxys auseinandergesetzt. Begonnen hatten wir damit, Proxys manuell zu erstellen. Wir haben dabei gesehen, dass man diese auf Basis von Dynamic Proxys recht schnell realisieren kann. Später sind wir einen Schritt weiter gegangen und haben nicht ganze Instanzen maskiert, sondern nur noch einzelne Methoden. Das dazugehörige Pattern hieß DynamicObjectAdapter. Alles zusammen hat sich jedoch zu recht viel manueller Tätigkeit summiert, was dazu führte, dass wir uns das gute alte Annotation Processing angesehen haben, um so viel wie möglich zu generieren. Jetzt haben wir einen Haufen Proxys.

Wenn man sich nun in einer realen Umgebung mit den Proxys beschäftigt, kommt man natürlich zu den Stellen, an denen die Proxys erstellt werden. Hier ein Beispiel aus einem der ersten Artikel mit der Verwendung des ProxyBuilder [1].

Listing 1: Beispiel mit ProxyBuilderfinal InnerDemoClass original = new InnerDemoClass(); final InnerDemoInterface demoLogic = ProxyBuilder .newDynamicProxyBuilder(InnerDemoInterface.class, original) .addSecurityRule(() -> true) .addSecurityRule(() -> true) .addMetrics() .build();

Der Quelltext, um Proxys zu erstellen, ist recht kompakt, hat aber im Businesscode eigentlich nichts verloren. Daraus ergeben sich verschiedene Fragen, aber schauen wir erst einmal im Detail hin. Hier wird ein Proxy erzeugt, was direkt zu der offensichtlichen Frage führt: Wann wird überhaupt ein Proxy benötigt? Ist die Stelle, an der ich ihn im Quelltext vorsehe, immer die richtige Wahl? Bei trivialen Beispielen ist das schon der Fall, aber leider nicht immer. Also erweitern wir das Beispiel um eine unsinnige, aber beispielhafte Entscheidung, ob jetzt der richtige Zeitpunkt für einen Proxy ist.

Listing 2: Brauchen wir hier einen Proxy?final InnerDemoClass original = new InnerDemoClass(); if(proxyNeeded) { final InnerDemoInterface demoLogic = ProxyBuilder .newDynamicProxyBuilder(InnerDemoInterface.class, original) .addSecurityRule(() -> true) .addSecurityRule(() -> true) .addMetrics() .build(); return demoLogic;} else { return original;}

Und was ist mit der Komposition des Proxys selbst? Ist die Kombination aus SecurityProxy und MetricsProxy immer fix? Eine gute Frage. Extrahieren wir e...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang