Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo zusammen,
ich habe in den letzten Wochen Spring 3 gelernt und nun versuche ich eine Beispielprogramm zu schreiben.Dabei bin ich aber unsicher wie weit man DI benutzen soll.
Z.B. in meinem Programm habe ich Klasse Usergroup welches nur Rechte hat und sie im Konstruktor übergeben bekommt und Klasse User welches im Konstruktor Usergroup übergeben bekommt.
Die Rechte werden aus einer Datenbank beim anmelden gelesen. Also weiss das Programm von Rechten erstmal nichts.
Ist es nun besser ein Usergroup Objekt mit DI zu erzeugen und Rechte mit setter-Methoden setzen und das gleiche mit User, oder die Objekte doch mit new erzeugen und DI nur beim Objekten benutzen bei denen ich schon im voraus weiss was ich setzen muss?
Ich hoffe ich konnte mein Problem richtig beschreiben. Danke im Voraus für die Antworten.
Zudem bin ich mir nicht sicher ob du über "READ" und "WRITE" ein Objekt vom Typ "Right" injezieren kannst. Eigentlich wird Spring das als String interpretieren (ACHTUNG der String ist dann "WRITE" mit den ") und wird es auch wieder nicht injezieren können.
Danke für den Tipp.
Right ist ein enum und ohne Anführungsstriche war Spring auch in der Lage das zu setzen.
Nun habe ich eine letzte Frage:
Ich möchte z.B. beim erstellen von OrderService also im Konstruktor geguckt wird ob der User der diese Service nutzen wird auch die entsprechen Rechte hat. Wenn ich aber im Konstruktor etwas schreibe dann werden die Objekte nicht inijiziert.
Hast du vlt noch eine guter Tipp?
Ich nehme an, dass isPermited auf dem Set operiert?
Wenn ja, dann musst du im applicationContext (die XML Datei) anstelle von property mit constructor-arg arbeiten, dann injeziert Spring die Abhängigkeiten über den Konstruktor.
Also ich hab jetzt bei mir einmal folgendes kleines Beispiel erstellt:
Java:
import java.util.Set;
public abstract class Service {
private final Set<String> requiredRights;
public Service(Set<String> requiredRights) {
this.requiredRights = requiredRights;
}
public Set<String> getRequiredRights() {
return requiredRights;
}
}
Java:
import java.util.Set;
public class OrderService extends Service {
public OrderService(Set<String> requiredRights) {
super(requiredRights);
for (String right : getRequiredRights()) {
System.out.println(right);
}
}
}
public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Service service = ctx.getBean("orderService", Service.class);
}
}
Gibt folgende Ausgabe:
Code:
19.03.2011 15:17:02 org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@45a877: startup date [Sat Mar 19 15:17:02 CET 2011]; root of context hierarchy
19.03.2011 15:17:03 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
19.03.2011 15:17:03 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1bcc0bc: defining beans [orderService]; root of factory hierarchy
READ
WRITE
Du möchtest, also, ohne das du das in Java formulierst dafür sorgen, dass die Methode isPermitted automatisch von Spring aufgerufen wird?
Das geht dann aber weit über DI hinaus. Möglich ist das wohl über AspectJ bzw. Spring AOP. Oder aber über Spring Lifecycle Methoden (glaube zumindest das es die gibt).
Wenn du Methoden durch Spring absichern möchtest (z.B. Exception, wenn User die Rechte nicht hat, um den Service zu nutzen), solltest du dir Spring Security anschauen. Das deckt u.a. diese Belange ab.
Wenn du Methoden durch Spring absichern möchtest (z.B. Exception, wenn User die Rechte nicht hat, um den Service zu nutzen), solltest du dir Spring Security anschauen. Das deckt u.a. diese Belange ab.