In una delle mie classi c'è un membro public static String
e ho bisogno di impostare questo valore nel applicationContext.xml
! Cioè, è possibile per noi iniettare un valore per questa proprietà statica?Iniezione di valori per le costanti statiche in primavera
risposta
Sì, c'è un esempio su questo link http://planproof-fool.blogspot.com/2010/03/spring-setting-static-fields.html
No, non è possibile iniettare un valore a un campo statico dal proprio contesto XML.
Se è possibile modificare la classe, sono disponibili le seguenti scelte semplici:
- rimuovere il modificatore static e aggiungono @ Inject/@ Autowire sopra il campo
- aggiungere un/setter metodo di costruzione/init.
Altrimenti, è possibile farlo con il supporto per la configurazione Java di Spring.
Un esempio:
La classe Demo con il campo statico e un metodo di JUnit che afferma che il contenitore Primavera inietta il valore desiderato nel campo statico:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("test-context.xml")
public class Demo {
public static String fieldOne;
@Test
public void testStaticField() {
assertEquals("test", fieldOne);
}
}
Aggiungere lo spazio dei nomi contesto al tuo applicationContext e il componente-scan elemento:
<context:component-scan base-package="com.example" />
Aggiungi il bean con il campo statico come il presente:
@Configuration
public class JavaConfig {
@Bean
public Demo demo() {
Demo.fieldOne = "test";
return new Demo();
}
}
In questo caso, la classe JavaConfig deve trovarsi nel pacchetto com.example come dichiarato nell'elemento component-scan.