Verwendung von Spring IDREF

9

Ich habe eine spring.xml wie folgt definiert:

%Vor%

Die Point -Klasse ist im Grunde eine Klasse mit 2 privaten int-Mitgliedern. Mein Problem ist, ich bekomme den Fehler auf IDREF wie folgt:

%Vor%

Soweit ich verstehe, ist der Zweck der IDREF (im obigen Fall), dass Bean PointA existiert (Fehlerprüfung) für das Bean-Dreieck. Also habe ich den Namen der Bean PointA (string) im IDREF-Element angegeben. Warum bekomme ich den obigen Fehler? Warum versucht es, eine Zeichenfolge in Point zu konvertieren, wenn ich dachte, dass es nur die Existenz einer Bean ( PointA ) überprüft, indem Sie nur seinen Namen angeben?

Ich bin wirklich verwirrt. Bitte helfen Sie. Danke.

    
yapkm01 30.01.2013, 15:07
quelle

6 Antworten

10

idref wird verwendet, um den Namen (Bezeichner) einer Bean (dh eine Zeichenfolge) zu übergeben.

<idref bean="pointA"> ist genau dasselbe wie nur der Zeichenfolgenwert pointA , außer dass Spring sich beschweren wird, wenn eine solche Bean nicht definiert ist.

Siehe die Spring-Dokumentation für Details.

Um die tatsächliche Bean zu übergeben, verwenden Sie ref genau so wie für pointB und pointC .

    
Michał Politowski 30.01.2013, 16:18
quelle
12

Das IDref-Element ist einfach eine fehlerfreie Methode, um die ID (String-Wert - keine Referenz) einer anderen Bean im Container an ein Element oder zu übergeben.

Im einfachsten Fall wird das IDref-Element verwendet, um einen String-Wert zu übergeben, und mithilfe des IDRef-Tags kann der Container zur Implementierungszeit validieren, dass die referenzierte, benannte Bean tatsächlich existiert.

beachte das folgende Beispiel

Beachten Sie die Ausgabe in der Konsole, wenn wir secondBean.getSecondMessage () aufrufen, der Wert ist firstBean, der mit dem Attribut idref festgelegt wurde.

Hinweis:      Ein üblicher Ort, an dem das Element einen Wert bringt, ist die Konfiguration von AOP-Interzeptoren in einer Bean-Definition von ProxyFactoryBean. Die Verwendung von Elementen, wenn Sie die Interceptor-Namen angeben, verhindert, dass Sie eine Interceptor-ID falsch schreiben.

    
praveen 30.08.2013 18:17
quelle
1

Mit dem Tag 'idref' können Sie zum Zeitpunkt der Bereitstellung überprüfen, ob das referenzierte, benannte Bean tatsächlich existiert oder nicht.

Zum Beispiel                                              

%Vor%

Wenn Sie Ihre Validierungs-Bean wie unten definieren, validiert Spring die Beans mit den IDs osho und Paulo zum Zeitpunkt der Bereitstellung. Wenn eine Bean in der Konfigurationsdatei nicht gefunden wird, löst Spring eine BeanDefinitionStoreException aus.

%Vor%

Nachfolgend finden Sie die vollständige Arbeitsanwendung.

%Vor%

BohnenValidator.java

%Vor%

myConfiguration.xml

%Vor%

Run HelloWorld.java, Sie erhalten keine Ausnahmen.

%Vor%

Aktualisieren Sie myConfiguration.xml wie folgt.

%Vor%

Wie Sie in der Konfigurationsdatei sehen, überprüft validatorBean die Bean mit der ID 'Krishna'.

%Vor%

Da die Bohne mit der ID 'Krishna' nicht existiert, wird ein Fehler auftreten.

%Vor%     
Hari Krishna 21.10.2016 11:42
quelle
0

Ich bin ein bisschen perplex, muss ich sagen. In dem Beispiel, das Sie praveen zur Verfügung stellen, wird es funktionieren, weil das Attribut in Ihrer Klasse vom Typ String ist, aber im Beispiel von yapkm01 ist das Attribut vom Typ Point und Sie erhalten die Ausnahme erwähnt. Um idref verwenden zu können, scheint es, als müsste er ein weiteres Attribut vom Typ String, hier "message", einführen, und dann würde der Code ungefähr so ​​aussehen:

%Vor%     
BennyL 02.12.2013 13:43
quelle
-1

Sie machen nichts falsch. Sie sollten <ref> in Ihrem Code und nicht <idref> verwenden. Das <idref> -Tag wird verwendet, um einen String-Typ-Wert zu erzeugen, der der ID der referenzierten Bean entspricht und für Validierungszwecke gedacht ist.

    
user6069813 04.05.2016 08:45
quelle
-1

In Ihrem Code

%Vor%

ist dasselbe wie:

%Vor%
  

Also in idref , du wirst einen String Wert übergeben (keine Referenz)   welches sollte das ' id ' einer anderen Bean sein. Ansonsten eine Ausnahme   wird geworfen.

    
Chip 07.02.2017 22:58
quelle

Tags und Links