[JavaBean] Attribute zur Laufzeit hinzufügen

TommyMo

Erfahrenes Mitglied
Hallo zusammen!

Hat jemand zufällgi schon mehr Erfahrung mit JavaBeans sammeln können? Ich zkiziere kurz meine Idee:

Ich würde für eine Applikation die ich gerade versuche zu realisieren, eine Notwendigkeit haben, Attribute zu einem JavaBean zur Laufzeit hinzuzufügen. Man könnte sich das so vorstellen, dass ich gerne einem Bean die Attribute einer Anderen Bean zuweisen würde. Der Sinn und Zweck dieser Sache ist es, eine beschrnänkte Auswahl für den Benutzer zu bieten. D.h. es können nur Attribute ausgewählt werden, die auch in den zwei anderen Beans verfügbar sind. Ich möchte nämlich in weiterer Folge eine Art Filter realisieren, und mir die Mühen mit der Evaluierung sparen (überprüfen ob die Eingabe des Users auch korrekt in den anderen Beans vorhanden ist).

Wenn jemand einen Tipp hätte wie ich das realisieren könnte, nicht scheuen zu schreiben :rolleyes:

Danke an Alle schonmal!

Gruß
TOM
 
Hallo!

Ich könnte mir dazu eine Lösung mit AspectJ oder Spring AOP vorstellen. Kannst du vielleicht mal ein kleines Anwendungsbeispiel dazu formulieren?

Gruß Tom
 
Ob das in Deinem Sinne ist, weiß ich nicht.

Als ich so eine Art "Filter" brauchte, ging ich einen anderen Weg. Ich nutzte die Java-Collections.

Im nachfolgenden Beispiel wird eine "Bean" mit n Attributen erstellt (Set mit allen gültigen Attributen). Die zwei zentralen Zugriffsmethoden get() und set() stehen für beliebig viele Attribute, akzeptieren jedoch nur die Attribute, die im Set enthalten sind:

Code:
public class FilterBean {
 
private Map map;
private Set attributes;
 
public FilterBean(Set attributes) {
  this.attributes = (attributes != null)? attributes: new HashSet();
  this.map = new HashMap();
}
 
public void set(String attribute, Object value) throws MissingAttributeException {
  if (attributes.contains(attribute)) {
    map.put(attribute, value);
  } else {
    throw new MissingAttributeException(attribute);
  }
}
 
public Object get(String attribute) throws MissingAttributeException {
  if (attributes.contains(attribute)) {
    return map.get(attribute);
  } else {
    throw new MissingAttributeException(attribute);
  }
}
 
 
public class MissingAttributeException extends IllegalArgumentException {
 
public MissingAttributeException(String attribute) {
  super(attribute);
}
 
}
 
Hallo!

bei der Verwendung einer Map wuerde man aber die Typensicherheit verlieren. Auch mit Generics waere bei diesem Modell die Typensicherheit nur eingeschraenkt...

Gruss Tom
 
Da magst Du Recht haben, jedoch war das für mich die schnellste, einfachste und mit der Exception die sicherste Lösung.

Die Typsicherheit bekäme man sicher mit etwas Mehraufwand hin, wenn man den Klassentyp mit abspeichert. Ich wollte jedoch nur immer verwendbare Methoden im Filter haben (d.h. Object als Value).
Ob das mit Java 1.5.x auch besser geht, weiß ich nicht, da ich noch nicht viel mit dieser Version programmiert habe.
 
Zurück