2011-09-08 5 views
0

봄에는 목록 속성에 동적으로 값을 삽입하고 싶습니다. 가능한가?봄에 목록 속성에 동적으로 값을 입력하십시오.

예 : 값 1을 세 번 지정하는 대신 일부 값을 기준으로이 값을 여러 번 반복 할 수있는 속성이 있습니다.

<bean id='myBean' class-"com.foo.Xyz"> 
<property name="myList"> 
    <value>1</value> 
    <value>1</value> 
    <value>1</value> 
</property> 
</bean> 

질문이 명확하지 않은 경우 알려주십시오.

+1

SpEL에서 가능할 수도 있지만 이상한 요구 사항처럼 보입니다 – Bozho

+0

가능하다면 좋지 않을까 생각합니다. 응용 프로그램의 논리를 Spring 설정에 넣는 것처럼 들리 겠지만 실제로는 응용 프로그램의 구성 요소를 함께 연결해야합니다. – Russell

+0

사실 Runnable을 구현하는 클래스 C가 있습니다. 자체 의존성이 있으므로이 클래스의 인스턴스를 완전히 생성하려면 스프링을 사용하고 있습니다. 이제 스레드 풀 ('java.util.concurrent.ScheduledThreadPoolExecutor ')에서 그러한 스레드의 'X'를 스케줄하고 싶습니다. 지금은 for 루프 X 시간에'appContext.getBean ('c')'를 사용하고 그것을 스케줄링하고 있지만 앱 컨텍스트에 대한 액세스가 필요합니다. – RandomQuestion

답변

2

맞춤 FactoryBean은 어떨까요?

public class RepeatingListFactoryBean implements FactoryBean<Object> { 

    private final Object item; 
    private final int count; 

    public RepeatingListFactoryBean(Object item, int count) { 
     this.item = item; 
     this.count = count; 
    } 

    @Override 
    public Object getObject() throws Exception 
    { 
     final ArrayList<Object> list = new ArrayList<Object>(count); 
     for(int i = 0; i < count; ++i) 
      list.add(item); 
     return list; 
    } 

    @Override 
    public Class<?> getObjectType() { 
     return item.getClass(); 
    } 

    @Override 
    public boolean isSingleton() { 
     return true; 
    } 
} 

당신은 다음과 같은 방법으로 (그러나 나는 그것을 테스트하지 않은)에서 사용할 수 있습니다 :

<bean id="listFactory" class="RepeatingListFactoryBean"> 
    <constructor-arg value="1"/> <!-- item --> 
    <constructor-arg value="3"/> <!-- count --> 
</bean> 

<bean id="myBean" class-"com.foo.Xyz"> 
    <property name="myList" ref="listFactory"/> 
</bean> 

주 수와 반복되어야하는 객체가 모두 선언적으로 구성 할 수있다.

+0

감사합니다. Tomasz,하지만 동일한 'item'을 목록에 여러 번 추가하지 않는 것이 동일한 인스턴스를 참조합니까? 이 목록에있는 항목 클래스의 다른 인스턴스를 원합니다. – RandomQuestion

+0

당신은'getBean()'이 어떻게 작동하는지 알고 있다고 언급했습니다 - 단지'BeanFactory'를'RepeatingListFactoryBean'에 주입하고 구체적인 bean이 아닌'beanName'을 생성자에 전달하십시오. 마지막으로 - 각 반복에서'getBean()'을 호출하면 끝난다. –

+0

감사합니다. 왜냐하면 내가 맞으면'BeanFactoryAware'를 구현해야합니다. 'ApplicationContextAware'를 구현하는 것보다 낫지는 않습니까? – RandomQuestion

관련 문제