2013-03-10 16 views
15

Mi chiedo se quanto segue è possibile. A scopo di test, desidero che vengano dichiarate diverse classi di simulazione nel contesto dell'applicazione per diversi test. Questi sono test di accettazione, utilizzando il client Jersey REST. C'è un modo per dichiarare dinamicamente un bean in fase di runtime? Spring ha un'API per consentire modifiche al contesto dell'applicazione dopo che il contesto è stato caricato?dichiarare dinamicamente i fagioli in fase di esecuzione in primavera

risposta

21

Il modo comune di disporre di bean diversi nel contesto dell'applicazione è l'utilizzo dei profili. Si può leggere su profili nei seguenti posti di origine primavera:

Circa la prima domanda, è possibile dichiarare i fagioli a runtime via BeanDefinitionRegistry.registerBeanDefinition() metodo, ad esempio:

BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(SomeClass.class); 
    builder.addPropertyReference("propertyName", "someBean"); // add dependency to other bean 
    builder.addPropertyValue("propertyName", someValue);  // set property value 
    DefaultListableBeanFactory factory = (DefaultListableBeanFactory) context.getBeanFactory(); 
    factory.registerBeanDefinition("beanName", builder.getBeanDefinition()); 

È anche possibile registrare un'istanza del bean singleton (già configurata) con

context.getBeanFactory().registerSingleton(beanName, singletonObject) 

Infine, Primavera non fornisce un modo chiaro per cambiare un fagiolo dopo l'aggiornamento del contesto, ma le approachs più comuni sono:

Problemi correlati