Böyle bir liste oluşturmak için kendi FactoryBean
'unuzu yazmanızı öneririm. Bu yeniden kullanılabilir ve daha sonra yalnızca XML kullanılarak yapılandırılabilir.
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.util.Assert;
public class CollectingListFactoryBean implements FactoryBean, ApplicationContextAware {
private ApplicationContext appCtx;
private Class type;
public Object getObject() {
Assert.notNull(type, "type must be initialized");
List result = new ArrayList();
result.addAll(appCtx.getBeansOfType(type).values());
return result;
}
public Class getObjectType() {
return List.class;
}
public boolean isSingleton() {
return false;
}
public void setApplicationContext(ApplicationContext applicationContext) {
this.appCtx = applicationContext;
}
public void setType(Class type) {
this.type = type;
}
}
Sonra XML yapılandırma
<bean id="bean1" class="Simple"/>
<bean id="bean2" class="Simple"/>
<bean id="tasks" class="CollectingListFactoryBean">
<property name="type" value="Simple" />
</bean>
<bean id="list" class="Comp">
<property name="tasks" ref="tasks"/>
</bean>
NOT olacak gibi FactoryBean
görünecektir: Ben yukarıdaki örneği test etmek için zaman yoktu. Sadece şablon olarak kullandığım kodu kullandım. ;) Özellikle type
özelliği için Class
bağımsız değişkeni olarak Simple
aktarımının bu şekilde çalışıp çalışmadığından emin değilim. Sadece bir dene. En kötü durumda, özellik olarak String
'u kullanmanız ve sınıfınızı almak için Class.forName(type)
'u kullanmanız gerekir. Ama benim tahminim, Spring'in sizin için bu dönüşümü yaptığı.
EDIT Bu çözüm işe yaramasa da, Robert Munteanu'nun yanıtını öneririm.
Bu, listenin kendisini Comp'in görevleri özelliğine koymaz mıydı? Bu, listenin kendisini basit Fasulyenin tüm çekirdekleriyle doldurmaya nasıl yardımcı olur? – rudolfson
@rudolfson: Liste artık mevcut olmamalı ve @Autowired için javadoc'un kuralları iyi bir açıklaması var: http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/beans /factory/annotation/Autowired.html –
Aydınlattığınız için teşekkürler. Autowire belgelerini sonuna kadar okumadım ve bu yeteneğin farkında değildim. Cevabınız için +1! – rudolfson