使用了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方法更改爲接受字符串並自行解析字符串
String有一個適當的屬性編輯器,用於Class [] , 謝謝。 – Jeroen 2010-05-18 07:19:53
@Jeroen:那是否回答你的問題? – skaffman 2010-05-18 08:54:44