Services über Spring in GUI setzen?

Juggl3r

Mitglied
Hallo,

derzeit haben wir es so gelöst, dass wir eine große "Services" Klasse haben, in welcher alle Services per Setter und Getter gesetzt bzw. geholt werden.

Anschließend wird zwischen verschiedenen GUI Fenstern immer im Konstruktor das services-Object übergeben, wodurch am Ende alle GUI Elemente immer zugriff auf ihre benötigten Services haben.

Wir haben jetzt aber von unseren Professoren erfahren, dass wir es so nicht lösen dürfen, sondern es über Spring lösen sollen. Allerdings ist uns nicht wirklich klar, wie das funktionieren soll.

1) Wenn wir die benötigten Services in den einzelnen GUI Fenstern jeweils mit @autowired annotieren, dann werden die Services aber erst bei den Settern gesetzt, unsere Konstruktoren brauchen aber schon die ganzen Services. Die "beste Idee" die wir derzeit haben ist, das wir den gesamten Konstruktor immer in eine "init()" Methode rauskopieren und dann bei den Setter aufrufen, was aber richtig schlecht ist... (dann wird ja auch bei mehreren Settern es öfters aufgerufen bzw. das Fenster öfters initialisiert).

2) Wenn wir alle Fenster im Beans-File definieren, dann wird ja beim Start alles aufeinmal gezeichnet, was zu einer enormen Verzögerung beim Starten der App führen würde. Außerdem müsste man ja irgendwie dann auf den Application Context in den GUI Fenstern zugreifen können, d.h. man bräuchte den Application Context in allen Konstruktoren (was insgesamt ja wieder die gleiche Lösung wie mit der Services Klasse wäre) und das wäre ja auch eine zyklische Abhängigkeit, weil wir im Beans File vom Application Context den Application Context selbst definieren müssten.....?


Also meine Frage insgesamt wäre: Wie macht man das normalerweise, dass man innerhalb der GUI auf die Services zugreifen kann über Spring?


lg
 

freez

Top Contributor
derzeit haben wir es so gelöst, dass wir eine große "Services" Klasse haben, in welcher alle Services per Setter und Getter gesetzt bzw. geholt werden.
Du fängst ja an zu erzählen, wie ihr es macht, bevor du sagst, was es werden soll.

Grundsätzlich arbeitet man natürlich über eine Init-Methode die mit [c]@PostConstruct[/c] annotiert ist und der Konstruktor bleibt normalerweise leer. Setzt natürlich voraus, dass ihr auf einem Application Server oder Servlet Container arbeitet, der eure Beans verwaltet ... dann wird die Methode nämlich automatisch aufgerufen. Ist es eine Standalone Anwendung, weiß ich grad nicht, ob es in Spring sowas wie [c]@PostConstruct[/c] gibt.

Also, konkret noch mal gefragt: Mit was arbeitet ihr da genau? Server, Frameworks?
 

Juggl3r

Mitglied
Hallo,

ja ich fand das ist die einfachste Erklärung, wenn ich mal erklär, wie wir es gemacht haben (Dann versteht mans auch).

Ja es ist stand alone, wir machens über XML und nicht Annotations, aber dort gibts auch eine init-Methode zum angeben. Das geht eh schon.

Unser Problem derzeit ist aber: Bei uns können sich user einloggen. Das initialisieren der Fenster funktioniert aber erst, sobald der User sich eingeloggt hat. (z.b. weil er Permissions benötigt oder weil bestimmte User nicht alles in der GUI sehen). D.h. eine Init Methode geht meistens nicht, weil sich da noch kein User eingeloggt hat.

Lösung derzeit.... alle Fenster in der Main GUI Injecten und dort wird dann überall händisch fenster.init(); aufgerufen, nachdem er sich eingeloggt hat. Das Resultiert aber darin, dass wir sehr viele Fenster in MainGUI injecten.....

Andere Frage: Wenn wir alle Fenster dann beim Starten über Beans erzeugen, führt das nicht zu einer enormen Verzögerung? Bei uns wurden vorher alle Fenster zu runtime erzeugt, wenn der user z.b. auf einen Button klickt, jetzt wird ja alles auf einmal erzeugt...
 

Phash

Top Contributor
du nutzt Dependency Injection.

Das muss halt jemand machen - ein Container könnte sowas.

Der Spring IOC Container kann diese Aufgabe übernehmen.
Chapter*3.*The IoC container
hier steht, wie das geht.

hier noch ein tutorial
Spring application context example - using Spring in a standalone Java application | alvinalexander.com

die Idee vom Injecten is, dass du die Abhängigkeit nicht explizit auflösen musst, also keinen Constructor brauchst, sondern dass die Instanz halt da is, wenn man sie braucht
 
Zuletzt bearbeitet:

Juggl3r

Mitglied
Hallo,

das ist mir natürlich auch alles klar und genau so (mit ApplicationContext) mache ich es auch schon die ganze Zeit. Ich hab auch "Spring im Einsatz" gelesen, also soweit kenne ich mich schon aus.

Unsere Application ist aber derzeit so, das man sich am Anfang einloggen muss. Es gibt verschiedene User, also normale User, Moderaten und Administratoren. Ein Admin darf mehr als ein User (z.b. User Daten editieren kann nur der admin). D.h. du Berechtigungsüberprüft wird natürlich nicht nur in der GUI sondern auch im Service gemacht.

Jetzt benötigen manche GUI Fenster die Services, z.b. das Fenster zum Ändern von User Informationen benötigt den User Service. In diesem Fenster werden unter anderem auch alle User angezeigt, eine Funktion, die nur der Admin machen darf, weshalb im Service das auch überprüft wird und falls es normaler User sie aufruft (oder kein User eingeloggt ist), eine Exception geworfen wird.

Wenn ich jetzt dieses Fenster im Beans file definiere, dann kann ich dort auch eine Init Methode angeben. Die brauche ich, weil ich das Fenster nicht innerhalb des Konstruktors initialisieren kann, da ich fürs initialisieren den userService brauche, welchen ich aber erst per Setter setze. Deshalb benutze ich derzeit eine eigene Init() Methode.

Das Problem ist jetzt, das wenn ich die init Methode im Beans file definiere (oder es per Annotation mache, das ist ja egal), dann wird das Bean initialisiert BEVOR sich jemand einloggt. Folglich wird eine Exception geworfen.

Mein derzeitiger Workaround ist, das ich _nicht_ im Beans file die Init Methode angebe, sondern im MainWindow direkt nach dem Login aufruf die Init() Funktion dieses Fensters aufrufe. Deshalb braucht natürlich das MainWindow auch einen Verweis auf dieses Fenster, weshalb ich das Fenster per Setter injecte.

Jetzt gibt es aber nicht nur 1 so ein Fenster das vom aktuellen User abhängt, sondern ca. 40-50. D.h. ich muss 40-50 Instanzvariablen im MainWindow machen, dafür die Setter und dann für alle danach init() Aurufen.

Meine Frage: Gibts dazu eine bessere/elegantere Lösung?
 

Phash

Top Contributor
naja ...

im Tomcat ist es so, dass quasi alles immer initialisiert ist.
Das heisst, beim Start wird alles injected was gebraucht wird.

Du prüfst beim Zugriff, ob es legal ist, mit deinen aktuellen Rechten die Aktion durchzuführen.


Auf dich umgesetzt:

du brauchst ein Prüflayer (evtl ein Sicherheitsaspekt), welches vor einer Aktion prüft, ob das legal ist.
Wenn du erst der Reihe nach injecten willst... keine Ahnung... das musst du wohl per Hand machen... (also so, wie du es machst)

Die 'richtige' Methode ist einfach die Prüfung zur Laufzeit... zumindest soweit ich weiss

du kannst ja dem User nur das anzeigen, was er darf, und dann ist es egal ob der Rest schon initialisiert wurde
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Zuul -Eureka - Services nicht gefunden 404 obwohl online Frameworks - Spring, Play, Blade, Vaadin & Co 0
T REST Services (Jersey/Spring) mit XSD Validierung vor dem Unmarhalling Frameworks - Spring, Play, Blade, Vaadin & Co 0
LimDul Spring-Batches in Docker über Rest starten/verfolgen Frameworks - Spring, Play, Blade, Vaadin & Co 0
Jose05 Java Anwendung, über den Browser steuern Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Rest Server über Jersey Low Code starten Frameworks - Spring, Play, Blade, Vaadin & Co 7
S Spring: Werte speichern über Requests hinwege ohne DB Frameworks - Spring, Play, Blade, Vaadin & Co 24
R Wie Spring Boot-Anwendung über Domain erreichbar machen? Frameworks - Spring, Play, Blade, Vaadin & Co 1
R Spring kann Bean über Konstruktor nicht erstellen Frameworks - Spring, Play, Blade, Vaadin & Co 9
D Wie kann ich im Tomcat ResourceBundle über JPA + Spring laden Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Hibernate und JDBC über Spring Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Ist es möglich in Spring Entity generische Listen verwenden Frameworks - Spring, Play, Blade, Vaadin & Co 3
R Spring Boot Test Assertions mit Objekten Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Pfad zu Test Datei in application.yml in Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 7
R Spring Boot sql Beziehungen Frameworks - Spring, Play, Blade, Vaadin & Co 12
8u3631984 Spring JPA Probleme beim SPeichern von Sets Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Spring Boot 3 Datenbanken zur Laufzeit Verbinden Frameworks - Spring, Play, Blade, Vaadin & Co 5
8u3631984 Spring JDBC Probleme beim Spaltennamen Frameworks - Spring, Play, Blade, Vaadin & Co 3
ExceptionOfExpectation In Meiner Spring-Boot Applikation verlangt die Datenbank Wert für eine ID Frameworks - Spring, Play, Blade, Vaadin & Co 5
H Spring Boot Applikation und JHM Benchmark sowie ContextConfiguration in H2 Tests ich bekomme es nicht hin Frameworks - Spring, Play, Blade, Vaadin & Co 2
ExceptionOfExpectation Tests in Spring-Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Eure Erfahrungen mit Primefaces und Spring - wer managed die Beans Frameworks - Spring, Play, Blade, Vaadin & Co 4
Avalon Get Request doppelt abfeuern ohne Post Redirect Get Pattern. Spring Boot Thymeleaf MVC Frameworks - Spring, Play, Blade, Vaadin & Co 12
thor_norsk Konfigurationsprobleme mit Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 9
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 1
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 13
L Spring Data und Rest Controller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
thor_norsk Spring Boot Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Spring Data und Rest Conroller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
thor_norsk Spring Boot und Docker Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring Amazon-SP-Api Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Aktualisiere Spring Controller Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Spring Data: Modellierung mit einer Embeddable bean Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Boot Test ob Validation geprüft wurde Frameworks - Spring, Play, Blade, Vaadin & Co 8
K Spring Boot OneToMany Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Spring Boot Docker Image erstellen und mit docker-compose konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Wann Spring Batch nutzen? Frameworks - Spring, Play, Blade, Vaadin & Co 1
P Spring Hessian Remote Beispiel Frameworks - Spring, Play, Blade, Vaadin & Co 20
8u3631984 Spring 2.7.8 Info Enpoint nicht zuerreichen Frameworks - Spring, Play, Blade, Vaadin & Co 1
gradlew.bat spring-boot:run funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 4
Zrebna Spring Boot/Thymeleaf: Bestätigungsemail senden. Frameworks - Spring, Play, Blade, Vaadin & Co 2
Zrebna Spring - Thymeleaf: Wieso wird gem. Fallunterscheidung entsprechende View nicht geladen? Frameworks - Spring, Play, Blade, Vaadin & Co 3
Dimax Spring UsernameNotFoundException(msg); auf der View msg ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 1
Dimax Spring UsernameNotFoundException(Message) auf der View Message ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 2
B Spring Boot und JPA Error creating bean Frameworks - Spring, Play, Blade, Vaadin & Co 24
R Spring Security: Wie kommt 'UserDetails' an Username und Passwort ran? Frameworks - Spring, Play, Blade, Vaadin & Co 6
R Spring Security: Wie den User dynamisch authentifizieren? Frameworks - Spring, Play, Blade, Vaadin & Co 8
R Spring Security: Authentication & Permissions Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Spring Boot: Warum soll PasswordEncoder in einer neuen Methode definiert sein? Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Cross-Origin beim Abrufen von Spring Endpoint Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring Boot und Microservices Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Boot additional Datasource for a single entity Frameworks - Spring, Play, Blade, Vaadin & Co 0
T Spring Resourcen Ordner ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring JPA und Repository Frameworks - Spring, Play, Blade, Vaadin & Co 12
D Mapstruct Dependency Injection funktioniert nicht mit Spring Frameworks - Spring, Play, Blade, Vaadin & Co 15
Avalon Wie sieht bei Euch das Deployment einer Spring Boot Anwendung aus? Frameworks - Spring, Play, Blade, Vaadin & Co 4
M Threads in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 7
W DI-Problem in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Boot: Was bewirkt parent in maven genau? Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Security: Run-as replacement Einsatzbereich? Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Vaadin+Spring Boot erster Seitenload nach Neustart endlos Frameworks - Spring, Play, Blade, Vaadin & Co 0
doncarlito87 Wie erhalte ich ein JSON aus eine NativeQuery (Spring Boot)? Frameworks - Spring, Play, Blade, Vaadin & Co 8
Avalon @Query Select Abfrage liefert falsche Werte (Spring Boot, JPA, Hibernate) Frameworks - Spring, Play, Blade, Vaadin & Co 3
Avalon Erstellung Dockerimage mit spring-boot:build-image in Spring Boot mit Umgebungsvariablen Frameworks - Spring, Play, Blade, Vaadin & Co 0
N Spring Integration - Logging Frameworks - Spring, Play, Blade, Vaadin & Co 7
D Spring Boot Field Injection in MapStruct Frameworks - Spring, Play, Blade, Vaadin & Co 5
D Spring Anfänger benötigt Hilfe Frameworks - Spring, Play, Blade, Vaadin & Co 9
OnDemand Spring Boot seltsame Logeinträge: Manipulationsversuche? Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Date keine neue Tabelle fuer Attribut Frameworks - Spring, Play, Blade, Vaadin & Co 1
T Spring Security Config File anpassen Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Spring Cloud : Resttemplate mit Loadballancer Frameworks - Spring, Play, Blade, Vaadin & Co 11
Dimax Spring resource not found Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Spring MongoDB unique index Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Spring Entity testen Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Entity testen Frameworks - Spring, Play, Blade, Vaadin & Co 5
Dimax Spring App Probleme beim Ausführen auf dem Tomcat Server Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring WebFlux Cors konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
Dimax Schöne View mit anchor scrolling in Spring Frameworks - Spring, Play, Blade, Vaadin & Co 2
Dimax Spring JPA Multiple Keys Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Security mit oauth2 in lokaler Konfiguration principal mocken Frameworks - Spring, Play, Blade, Vaadin & Co 0
D Spring Boot Mile Stone und Snapshot Versionen Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Exception Body Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Was ist das Framework "Spring"? Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Unit/Integrations Testing Frameworks - Spring, Play, Blade, Vaadin & Co 3
D Spring Unit Test: UnsatisfiedDependencyException: Error creating bean with name Frameworks - Spring, Play, Blade, Vaadin & Co 2
H Resource Liste Lazy Autowired Spring Context Frameworks - Spring, Play, Blade, Vaadin & Co 2
M Java Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 5
M Spring Security Login with Credentials Frameworks - Spring, Play, Blade, Vaadin & Co 0
N Spring Boot - Overkill für private Projekte? Frameworks - Spring, Play, Blade, Vaadin & Co 3
krgewb Spring und GWT - & wird zu & amp; Frameworks - Spring, Play, Blade, Vaadin & Co 2
K Migration eines internen Frameworks zu Spring:Boot Frameworks - Spring, Play, Blade, Vaadin & Co 0
OnDemand JPA/Spring Repository Like Suche leeres Ergebnis Frameworks - Spring, Play, Blade, Vaadin & Co 0
Z Hibernate & Postgres in Spring Boot (Syntaxprobleme) Frameworks - Spring, Play, Blade, Vaadin & Co 2
Z Spring Boot mit JPA;, Hibernate, Rest & Lombok Frameworks - Spring, Play, Blade, Vaadin & Co 8
M Spring Initializer - Webservices Frameworks - Spring, Play, Blade, Vaadin & Co 0
D Spring Hateoas Frameworks - Spring, Play, Blade, Vaadin & Co 1
ma095 Spring und Postgresql Errors Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Spring+Vaadin App startet nicht Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Request externe API SSL Error Frameworks - Spring, Play, Blade, Vaadin & Co 7
OnDemand Spring Repo speichert, aber es kommt in der DB nicht an Frameworks - Spring, Play, Blade, Vaadin & Co 3
Dimax Im Spring ,Mysql-Funktion aufrufen Frameworks - Spring, Play, Blade, Vaadin & Co 2

Ähnliche Java Themen

Neue Themen


Oben