Wicket mit Spring ohne extra Proxies

Status
Nicht offen für weitere Antworten.

deamon

Bekanntes Mitglied
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?
 

byte

Top Contributor
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!

Kann mir nicht vorstellen, dass das da so steht, denn es ist schlichtweg falsch. Spring macht zwar massiv gebrauch von Proxies, aber wenn man eine einfache Bean erzeugt, dann ist das kein Proxy sondern ein einfaches Objekt. Proxies kommen erst ins Spiel, wenn man AOP einsetzt. Und auch da kann man wählen, ob man AOP mittels JDK-Proxies realisieren will oder per AspectJ (Load Time Weaving, also Bytecode Instrumentation).
Ebenso falsch ist, dass jede Spring Bean eine Referenz auf den ApplicationContext bekommt. Das ist absoluter Käse und nur in den seltensten Fällen so, z.b. wenn die Bean das Interface ApplicationContextAware implementiert.
 
Zuletzt bearbeitet:

deamon

Bekanntes Mitglied
In Wicket in Action steht auf Seite 309:
"One problem with code from the previous section ist that it can lead to memory leaks. Be careful never to hold a reference to a Spring bean in your components. Spring often creates proxies for the beans it creates (for instance, to support transactions), and when Wicket serializes your components - as it does for every request, if you use the default session store - you may end up serializing the entire Spring container with them."

Dann kommt ein als problematisch bezeichnetes Beispiel, in dem ein Service von Spring erzeugt wird und eine Referenz darauf in einer Instanzvariable einer Komponente gespeichert wird.

Ich wundere mich auch, dass der ganze Container serialisiert werden sollte, aber wenn es kein Problem wäre, hätten die Wicket-Entwickler sicher kein Unterprojekt für dessen Lösung ins Leben gerufen. Und da der Code nicht davon abhängen sollte, ob man AOP mit oder ohne Proxy macht, wäre es sicherer die Wicket-Proxies zu verwenden.
 

byte

Top Contributor
Ich kenne Wicket nicht, daher kann ich dazu nichts sagen. Spricht aber auf jeden Fall nicht für das Framework, wenn es mit Proxies Probleme hat.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Wicket: Füllen von Textarea via AJAX irgendwo auf der PAGE Web Tier 1
aze Wicket: Komponente und erzeugtes ModalWindow haben unterschiedliche Referenzen Web Tier 0
K Wicket: Pfad zu HTML Dateien ändern/erweitern Web Tier 2
G Wicket Web Tier 6
M Joda DateTime in Wicket Web Tier 6
M Wicket: extends Panel aktualisieren Web Tier 6
H [WICKET] zusätzliche Zeilen per "Klick" generieren Web Tier 2
H [WICKET] clean form input trotz AjaxSubmitLink Web Tier 6
reibi Wicket - BSP signIn2 ... Cookies Web Tier 3
reibi Wicket HelloWorld Web Tier 7
F Wicket vs Tapestry Web Tier 10
G JSF vs. Tapestry vs. Wicket Web Tier 6
J Wicket dynamisches Markup Web Tier 3
D MultiActionController von Spring ohne action und / aufrufen Web Tier 3
D Wo ist org.springframework.web.servlet in Spring 2.5? Web Tier 4
N JSF: Servlet für Bilder: Verbindung zu Spring Service ? Web Tier 1
platofan23 Java Login Überprüfung ohne Srciptlets in der JSP Web Tier 4
A JSF form absenden ohne require validation (andere schon) Web Tier 4
E Kann man ein Formular in JSP auch per Tastendruck ohne Javascript-Verwendung abschicken? Web Tier 2
T JSF Datenbankzugriff ohne Persistenzschicht Web Tier 3
H JSF JSF 2.0 (Primefaces) commandLinks mit action="mypage.xhtml" ohne die URL im Browser zu ändern Web Tier 8
M JSF Datatable, nichts geht ohne vorher zu refreshen... Web Tier 4
D Servlet JSP Umfrage ohne Formular Web Tier 2
J JSF AJAX-Aufruf ohne Komponente Web Tier 4
S [JSF] CommandButton/Link ohne Validierung Web Tier 3
JCODA Tomcat ohne Fenster starten Web Tier 5
R Zugriff auf geschützten Bereich ohne Authentifizierung Web Tier 10
G JSF 2x h:selectManyCheckbox ohne duplikate Auswahl/selectManyCheckbox und f:ajax Web Tier 3
ruutaiokwu template engine gesucht ohne abhängigkeit zum servlet container Web Tier 2
D Struts2 Combobox ohne Eingabefeld Web Tier 2
G Framework ohne JSP? Web Tier 10
D Ajax und Validation ohne große Umstrukturierung Web Tier 3
T Tomcat Projekt ohne Eclipse starten Web Tier 11
G pdf direkt darstellen ohne downloadfenster Web Tier 4
U JSP form-Daten (ohne name-Attribut) an Servlet = Problem Web Tier 6

Ähnliche Java Themen

Neue Themen


Oben