Ich habe experimentiert mit Spring 3.1's bean definition profiles und verschachtelte Bohnen. Ich hatte gehofft, dass ich abhängig vom aktiven Profil verschiedene Bohnen definieren könnte. Betrachten Sie das folgende stark über vereinfachtes Beispiel so, dass mein Frühling Kontext enthält so etwas wieSpring 3.1 Bean Sichtbarkeit mit Bean Definitionsprofile
<bean id="say" class="test.Say" p:hello-ref="hello"/>
<beans profile="prod">
<bean id="hello" class="test.Hello" p:subject="Production!"/>
</beans>
<beans profile="dev">
<bean id="hello" class="test.Hello" p:subject="Development!"/>
</beans>
ich die folgende Fehlermeldung erhalten:
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'say' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'hello' while setting bean property 'hello'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'hello' is defined at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1360) aJava Result: 1
Ich hatte erwartet, dass die hallo Bohne würde nach der definiert werden aktives Maven-Profil (in meinem Fall prod oder dev). Ich fange an zu denken, dass die aktiven Spring-Profile (spring.profiles.active) möglicherweise völlig unabhängig von Maven-Profilen sind.
Könnte jemand bitte erklären, wo ich falsch liege? (Ist das überhaupt möglich mit Profilen?).
Dank maba, gibt es eine schöne Möglichkeit, spring.profiles.active außerhalb der Webanwendung zu verwenden? z.B. für Komponententests –
Wenn Sie den Federtest verwenden, können Sie die Annotation \ @ActiveProfiles zusammen mit den anderen Standard-Federtest-Annotationen (\ @ContextConfiguration, etc ...) verwenden. In der Regel verwende ich dies, um Datenbank-Tests für verschiedene Umgebungen durchzuführen. Ich laufe einen gegen Derby während des "Test" Maven-Ziels und habe einen anderen Satz für Orakel, der für das Maintor "Integrationstest" läuft. Ich erstelle abstrakte Klassen, um die Tests und die \ contextConfiguration zu definieren und sie zu erweitern, und benutze @ActiveProfiles, um zu einem Unit- oder Integrationstest zu werden. – Matt
Danke, ich war mit diesem Fall fest und du hast mich gerettet: D –