mi chiedo perché in primavera DI funziona la seguente definizione di fagioli (io uso bean instantiation with a static factory method e Guava di Suppliers.ofInstance
):metodo generico fabbrica in primavera DI
<bean id="keySupplier" class="com.google.common.base.Suppliers"
factory-method="ofInstance">
<constructor-arg>
<value type="java.lang.String">someReallyLongValue <!-- note line break here -->
</value>
</constructor-arg>
</bean>
ma questo non lo fa:
<bean id="keySupplier" class="com.google.common.base.Suppliers"
factory-method="ofInstance">
<constructor-arg type="java.lang.String" value="someReallyLongValue" />
</bean>
Viene generata la seguente eccezione:
org.springframework.beans.factory.BeanCreationException: Errore di creazione g di fagioli con nome 'userRepo' definito nella risorsa percorso della classe:
(...)
dipendenza Insoddisfatto esprime attraverso argomento del costruttore con indice 0 di tipo [java.lang.Object]:
tipi metodo factory di argomenti ambigui - ha fatto si specificano i riferimenti bean corretti come argomenti del metodo factory?
Il problema è, nel mio caso, quando uso la definizione prima di fagioli con davvero lunga stringa come un valore mia linea dell'editor pause dopo l'ultimo carattere della stringa, che causa che stringa viene passata con l'aggiunta di spazi-Suppliers.ofInstance
e di conseguenza rompe il mio codice.
La seconda definizione sarebbe più rigida per gli spazi bianchi ma, sorprendentemente, non funziona (probabilmente non affronta il tipo generico, nonostante il tipo sia specificato nell'attributo type).
Posso forzare Spring a ignorare lo spazio vuoto nel tag <value>
in qualche modo?
Oppure utilizzare correttamente <constructor-arg type="java.lang.String" value="someReallyLongValue" />
? O dovrei presentare un problema perché si tratta di un bug di primavera?
Preferisco non fare alcuna ipotesi sulla stringa (ad esempio, utilizzare string.trim()
qui).
Prima di tutto, configurare l'editor XML in modo che non si inseriscano interruzioni di riga automaticamente. Se non esiste tale opzione, cambia editor;) –
@ YvesMartin Posso configurare il mio editor per farlo, ma se qualcun altro in futuro esegue la formattazione (semplice 'CSf' in Eclipse), non mi piace il fatto che l'applicazione sarà rotto a causa di ciò. – Xaerxess
Tale problema esisterà sempre. È necessario spostare tali informazioni di testo nel file delle proprietà. –