2013-09-03 12 views
10

ho iniettare stringhe nel mio config primavera facendo quanto segue:scorciatoia per l'iniezione di stringhe con la primavera

<bean class="java.lang.String"> 
    <constructor-arg type="java.lang.String" value="Region" /> 
</bean> 

Esiste un modo più breve di farlo?

Aggiornamento: Sto usando la molla 3.0.3.

queste sono in realtà utilizzato per popolare l'elenco:

 <list> 
      <bean class="java.lang.String"> 
       <constructor-arg type="java.lang.String" value="Region" /> 
      </bean> 
      ... 

sembra che questo funziona:

<list> 
    <value>Region</value> 
    <value>Name</value> 
    .... 

ma sono d'accordo con i suggerimenti che questo dovrebbe finalmente andare in una proprietà ed essere passata in

+0

Quale versione di Primavera? –

+0

Come stai usando questo? Non puoi semplicemente usare 'value =" Region "' al posto di questo bean? – Qwerky

+0

Non è un doping illegale? –

risposta

13

Non si dovrebbero avere i fagioli String. Basta usare direttamente il loro valore.

Creare un file di proprietà strings.properties posero sul classpath

strings.key=Region 

dichiarare una PropertyPlaceholderConfigurer

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location"> 
     <value>strings.properties</value> 
    </property> 
</bean> 

Poi annotare stringhe campo istanza come

@Value("${strings.key}") 
private String key; 

Primavera inietterà il valore dal file strings.properties fil e in questa stringa key.

Questo ovviamente presuppone che la classe in cui appare l'annotazione @Value sia un bean gestito nello stesso contesto di PropertyPlaceholderConfigurer.

+1

Si noti che è possibile utilizzare '@ Value' anche sui parametri del costruttore. –

+0

Non vedo come questo sia un modo più breve e più efficace del semplice svezzamento di una classe String tramite il costruttore String già eseguito dal richiedente. Qual e il punto? –

+0

@BlessedGeek Per uno, non si dovrebbe considerare un 'String' come _bean_. Spring non gestirà realmente il ciclo di vita di un 'String' come sarebbe, ad esempio, qualche istanza di classe' @ Service'. Dovresti considerare i tipi primitivi, 'String' e' Class' come tipi di base gestiti da Spring, non come bean. Una volta dichiarato 'PropertyPlaceholderConfigurer', è possibile dichiarare tutte le proprietà che si desidera (invece di' 'dichiarazioni) e fare riferimento a esse con la notazione del segnaposto' $ {..} '. –

4

Non è necessario creare un bean di tipo String. Basta passare il valore a constructor-arg:

<bean id="foo" class="x.y.Foo"> 
    <constructor-arg value="Region"/> 
</bean> 

opere.

0

In aggiunta alle altre risposte e se si utilizza Spring 3.1+, è possibile utilizzare lo spazio dei nomi del costruttore.

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:c="http://www.springframework.org/schema/c" <-- add c namespace 
    ... 

<bean id="someClass" class="a.b.c.SomeClass" 
    c:someProperty="Region" 
/> 
Problemi correlati