Hallo,
ich habe gerade in dem Buch "Wicket in Action" gelesen, dass man in Klassen der Wicket-Anwendung keine Referenzen auf Spring-Beans halten soll, weil Spring Proxy-Objekte erzeugt, die eine Referenz auf den ApplicationContext enthalten und somit beim persistieren jeder Seite der gesamte ApplicationContext mitgespeichert würde!
Als Lösung schlagen sie die Verwendung eines Wicket-Unterprojekts für die Spring-Integration vor. Diese Bibliothek erzeugt Proxies, die die SpringBeans kapseln. Besonders elegant finde ich diesen Ansatz aber nicht. Das Beispiel ohne Annotations finde ich sogar hässlich.
Nun meine Frage: würde es nicht auch reichen, wenn man in den Klassen der Wicket-Anwendung die von Spring injizierten Referenzen statisch machen würde? Es gibt schließlich keinen Grund warum jede Klasse eine eigene Referenz auf einen Dienst haben sollte. Problematisch wäre es nur, wenn es - warum auch immer - doch keine Singletons mehr sein sollen. Allerdings könnte man auch leicht das Wort "static" vergessen und würde sich im Betrieb über den Speicherbedarf und die Performance der Anwendung wundern ...
Wie ist das mit anderen DI-Frameworks wie z. B. Google Guice? Erzeugen die auch Proxies? Für DI an sich bräuchte man das vermutlich nicht. Soweit ich weiß ist das bei Spring wegen AOP der Fall.
Oder bleibt man bei Wicket besser bei "unmanaged code" und verzichtet ganz auf DI? Wie sind eure Erfahrungen?
ich habe gerade in dem Buch "Wicket in Action" gelesen, dass man in Klassen der Wicket-Anwendung keine Referenzen auf Spring-Beans halten soll, weil Spring Proxy-Objekte erzeugt, die eine Referenz auf den ApplicationContext enthalten und somit beim persistieren jeder Seite der gesamte ApplicationContext mitgespeichert würde!
Als Lösung schlagen sie die Verwendung eines Wicket-Unterprojekts für die Spring-Integration vor. Diese Bibliothek erzeugt Proxies, die die SpringBeans kapseln. Besonders elegant finde ich diesen Ansatz aber nicht. Das Beispiel ohne Annotations finde ich sogar hässlich.
Nun meine Frage: würde es nicht auch reichen, wenn man in den Klassen der Wicket-Anwendung die von Spring injizierten Referenzen statisch machen würde? Es gibt schließlich keinen Grund warum jede Klasse eine eigene Referenz auf einen Dienst haben sollte. Problematisch wäre es nur, wenn es - warum auch immer - doch keine Singletons mehr sein sollen. Allerdings könnte man auch leicht das Wort "static" vergessen und würde sich im Betrieb über den Speicherbedarf und die Performance der Anwendung wundern ...
Wie ist das mit anderen DI-Frameworks wie z. B. Google Guice? Erzeugen die auch Proxies? Für DI an sich bräuchte man das vermutlich nicht. Soweit ich weiß ist das bei Spring wegen AOP der Fall.
Oder bleibt man bei Wicket besser bei "unmanaged code" und verzichtet ganz auf DI? Wie sind eure Erfahrungen?