tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
619
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    DarthShader DarthShader ist offline Mitglied Platin
    Registriert seit
    May 2004
    Beiträge
    684
    Hallo,

    ich habe eine Frage zum Spring IoC Container. Ist es möglich, die Property einer Bean auf einen Wert zu setzen, der wiederum eine Property einer anderen Bean ist?

    Beispiel: Property "propA" von Bean "A" soll auf Property "propB" von Bean "B" gesetzt werden:

    Code xml:
    1
    2
    3
    
    <bean id="A" class="...MyClass">
        <property name="propA" ref="B.propB" />
    </bean>


    Ist das irgendwie möglich? Oder MUSS hier "propB" selbst auch als Bean vorliegen?


    Vielen Dank für Eure Hilfe
     

  2. #2
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Code xml:
    1
    2
    3
    4
    5
    
    <bean id="A" class="...MyClass">
      <property name="propA">
        <bean factory-bean="yourBean" factory-method="getValue" />
      </property>
    </bean>

    Dem Beanelement innerhalb des property Elements kannst du auch per <constructor-arg /> Element Methodenparameter für die factory-method mitgeben.

    REINHAUN!
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  3. #3
    DarthShader DarthShader ist offline Mitglied Platin
    Registriert seit
    May 2004
    Beiträge
    684
    Hallo Olliver,

    vielen Dank für Deine Antwort. Wenn ich das richtig verstehe, müsste der XML Code auf mein Beispiel angewendet dann so aussen?

    Code xml:
    1
    2
    3
    4
    5
    
    <bean id="A" class="...MyClass">
      <property name="propA">
        <bean factory-bean="B" factory-method="getPropB" />
      </property>
    </bean>

    Man nutzt damit quasi den Mechanismus ja aus, es wird ja gar keine Bean neu erzeugt, sondern das Ergebnis von "getProbB einfach als property "propA" für Bean "A" gesetzt.

    Ist das so alles korrekt, oder mißverstehe ich etwas?
     

  4. #4
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Rrrrichiiiich...

    REINHAUN!
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  5. #5
    DarthShader DarthShader ist offline Mitglied Platin
    Registriert seit
    May 2004
    Beiträge
    684
    Ich habe es gerade einmal ausprobiert, so sieht mein echter Kontext für eine Bean aus:

    Code xml:
    1
    2
    3
    4
    5
    
    <bean id="simpleNoticeController" class="....SimpleNoticeController">
        <property name="appWindow">
            <bean factory-bean="uiController" factory-method="getAppWindow" />
        </property>
    </bean>

    "uiController" ist eine andere Bean, die in ihrer Initialisierungsmethode einen JFrame als Programmfenster erstellt und damit sein eigenes Property "appWindow" setzt.

    Die obige Definition soll also die Property "appWindow" der Klasse "SimpleNoticeController" auf die Rückgabe der Methode "getAppWindow" der Bean "uiController" setzen, welche von Typ JFrame ist.

    Spring gibt mir nun folgende Meldung aus:

    Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.swing.JFrame] is defined: Unsatisfied dependency of type [class javax.swing.JFrame]: expected at least 1 matching bean
    Was für eine "matching bean" erwartet er denn da? Habe ich in meiner XML etwas falsch gemacht, oder das Prinzip generell falsch verstanden?

    Über Deine Hilfe würde ich mich sehr freuen

    Danke!
     

  6. #6
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Strange, kommt da noch ein Beanname mit? Welche Bean will er denn erstellen? Der Setter von deinem SimpleNoticeController muss einen Parameter aufnehmen vom Rückgabetyp von getAppWindow auf deinem uiController. Passt das?

    Gruß
    Ollie
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  7. #7
    DarthShader DarthShader ist offline Mitglied Platin
    Registriert seit
    May 2004
    Beiträge
    684
    Oh ich glaubs nicht, Schande über mich - bei der ganzen Diskussion um XML oder Annotaions in dem anderen Thread, den wir führen, habe ich doch tatsächlich im Code noch ein "@Resource" an dem "appWindow" Feld gehabt, und natürlich gibt es die Bean "appWindow" nicht, genau das sagt mir Spring hier.

    Tut mir echt leid, und danke nochmal, nun klappt es
     

Ähnliche Themen

  1. Wie starte ich Prozesse aus einer Session Bean?
    Von sepan im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 08.03.10, 14:28
  2. Bean-Variablen als Parameter einer Methode einer anderen Bean
    Von mcdroemmel im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 25.06.09, 17:53
  3. ClassCastException bei Aufruf einer Stateful Session Bean
    Von Urmel103 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 12
    Letzter Beitrag: 13.02.09, 19:03
  4. JSF Managed Bean - Property Setzen
    Von KarlRannseier im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 4
    Letzter Beitrag: 28.03.08, 17:07
  5. Antworten: 2
    Letzter Beitrag: 29.03.05, 19:14