2014-12-15 5 views
3

Spring 3.2와 XML 설정을 사용하여 다른 bean/property의 값이 참인 경우에만 bean을 작성하는 방법을 찾으려고합니다.Spring 조건부 Bean을 다른 bean에 기반하여 작성하기

<bean id="isEnabled" class="java.lang.Boolean"> 
    <bean factory-bean="configurationService" factory-method="getBooleanValue"> 
       <constructor-arg index="0"> 
        <util:constant static-field="org.code.ConfigurationKeys.ENABLED"/> 
       </constructor-arg> 
    </bean> 
</bean> 

<if isEnabled=true> 
    ..... create some beans 
</if> 

난 당신이 개체를 만드는 공장을 사용하지 않는 이유는이 정확히 ...

+0

당신이 실제 사용 사례에 대한 자세한 정보를 제공 할 수 있습니다 다음과 같습니다? –

+0

질문이 있은 지 오래되었지만 아직 답변을 찾지 못했다면 Sprint Profile 기능이 그러한 작업을위한 도구 일 수 있습니다. –

+0

스프링 자바 설정과'@ Conditional' 어노테이션으로 매우 간단하게 처리 할 수 ​​있습니다. 그러나 xml 구성이 중요하다면 다음 기사를 살펴보십시오. http://robertmaldon.blogspot.ru/2007/04/conditionally-defining-spring-beans.html – androberz

답변

0

이 필요하고 게으른 할 때 수행 스프링 EL만을 사용하여 일부 약간 유사한 사례를 본 적이 .

<bean id="second "class="xxx.xxx.Class" lazy-init="true" scope="prototype"/> 

스프링 구성 내에서 if 문을 도입 할 방법은 없지만 프로필은 작동하지만 프로그래밍 방식 구성이 아닌 환경과 관련이 있습니다.

2

프로필을 사용할 수 있습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.2.xsd" > 


    <!-- here goes common beans --> 

    <beans profile="Prof_1"> 
     <import resource="./first-config.xml" /> 
    </beans> 
    <beans profile="Prof_2"> 
     <import resource="./second-config.xml" /> 
    </beans> 
</beans> 

동시에 여러 프로필을 활성화하거나 활성화하지 않을 수도 있습니다. programtaically 우리의 web.xml에 초기화를 추가 할 필요가이 작업을 수행 할 수 있지만 여러 가지 방법이 있습니다 활성화하려면

<context-param> 
    <param-name>contextInitializerClasses</param-name> 
    <param-value>com.test.MyCustomInitializer</param-value> 
</context-param> 

MyCustomInitializer는

public class MyCustomInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { 
    @Override 
    public void initialize(ConfigurableApplicationContext applicationContext) { 
     try { 
      String activeProf; 
      // some logic to either read file/env variable/setting to determine which profile to activate 
      applicationContext.getEnvironment().setActiveProfiles(activeProf); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
}