2010-05-18 44 views
1

Spring是否有辦法基於逗號分隔的類列表創建bean的集合或數組。例如:根據以逗號分隔的類列表創建spring beans

package mypackage; 
public class Bla { 
private Set<MyBean> beans; 
public void setBeans(Set<MyBean> beans) { 
    this.beans = beans; 
} 
} 

隨着應用程序上下文:

<bean id="bla" class="mypackage.Bla"> 
<property name="beans"> 
    <set> 
    <bean class="mypackage.Bean1, mypackage.Bean2" /> 
    </set> 
</property> 
</bean> 

優選地,所述豆都被初始化,並從上下文有線,留下代碼簡單化成爲可能,這是可能的?

回答

1

使用了ApplicationContextAware和ApplicationListener組合:

public class BeanInitializer implements ApplicationContextAware, ApplicationListener<ContextRefreshedEvent> { 

    private ApplicationContext context; 
    private List<Class<?>>  beanClasses; 

    public void onApplicationEvent(final ContextRefreshedEvent event) { 
     final AutowireCapableBeanFactory beanFactory = this.context.getAutowireCapableBeanFactory(); 
     for (final Class<?> beanClass : this.beanClasses) { 
      beanFactory.autowire(beanClass, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); 
     } 
    } 

    public void setApplicationContext(final ApplicationContext context) throws BeansException { 
     this.context = context; 
    } 

    public void setBeanClasses(final List<Class<?>> beanClasses) { 
     this.beanClasses = beanClasses; 
    } 

} 

在Spring的配置,這樣做:

<bean class="com.yourcompany.BeanInitializer"> 
<property name="beanClasses"> 
    <list> 
     <value>com.yourcompany.Type1</value> 
     <value>com.yourcompany.Type2</value> 
     <value>com.yourcompany.Type3</value> 
    </list> 
</property> 
</bean> 

編輯:其實,如果你想用逗號隔開,它可能會更喜歡這個:

<bean class="com.yourcompany.BeanInitializer"> 
<property name="beanClasses" 
     value="com.yourcompany.Type1,com.yourcompany.Type2,com.yourcompany.Type3" /> 
</bean> 

我不知道是否有內置屬性e ditor將逗號分隔的字符串轉換爲類的列表,但如果不是,您可以自己創建一個,也可以將setter方法更改爲接受字符串並自行解析字符串

+0

String有一個適當的屬性編輯器,用於Class [] , 謝謝。 – Jeroen 2010-05-18 07:19:53

+2

@Jeroen:那是否回答你的問題? – skaffman 2010-05-18 08:54:44