2013-03-10 16 views
15

Zastanawiam się, czy jest to możliwe. Do celów testowania chciałbym, aby różne klasy próbne były deklarowane w kontekście aplikacji dla różnych testów. Są to testy akceptacyjne przy użyciu klienta REST z Jersey. Czy istnieje sposób dynamicznego deklarowania komponentu bean w czasie wykonywania? Czy Spring ma interfejs API umożliwiający zmiany w kontekście aplikacji po załadowaniu kontekstu?dynamicznie zadeklaruj fasolę w czasie wykonywania na wiosnę

Odpowiedz

21

Najczęstszym sposobem na różne fasole w kontekście aplikacji są profile. Można przeczytać o profilach w następujących stanowisk źródłowych wiosna:

O swoim pierwszym pytaniu, można zadeklarować fasoli w czasie wykonywania przez BeanDefinitionRegistry.registerBeanDefinition() sposobem, na przykład:

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()); 

Możliwe jest również zarejestrowanie instancji pojedynczej komórki (już skonfigurowanej) za pomocą

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

Wreszcie wiosna nie zapewnia wyraźny sposób zmienić fasoli po odświeżeniu kontekst, ale najczęstsze podej są:

Powiązane problemy