как связать список бобов весной - PullRequest
2 голосов
/ 25 февраля 2011

Каков наилучший способ связать список бинов в весеннем XML, уловка в том, что данные каждого бина должны быть определены в XML-файле (это потому, что во время этого спринта они будут приходить из xml, а затем из db, поэтому не стоит тратить слишком много времени на создание).

это то, что у меня есть, но должен быть лучший способ:

   <bean id="annouce1" class="com.company.domain.Announcement">
       <property name="body" value="bodyasfsdf"/>
       <property name="title" value="title"/>
       <property name="linkText" value=">>"/>
       <property name="linkUrl" value="http://google.com"/>
   </bean>
   <bean id="annouce2" class="com.company.domain.Announcement">
       <property name="body" value="bodyasfsdf"/>
       <property name="title" value="title"/>
       <property name="linkText" value=">>"/>
       <property name="linkUrl" value="http://google.com"/>
   </bean>
       <bean id="annouce3" class="com.company.domain.Announcement">
       <property name="body" value="bodyasfsdf"/>
       <property name="title" value="title"/>
       <property name="linkText" value=">>"/>
       <property name="linkUrl" value="http://google.com"/>
   </bean>
       <bean id="annouce4" class="com.company.domain.Announcement">
       <property name="body" value="bodyasfsdf"/>
       <property name="title" value="title"/>
       <property name="linkText" value=">>"/>
       <property name="linkUrl" value="http://google.com"/>
   </bean>


   <util:list id="homepageAnnoucements" scope="singleton">
          <ref bean="annouce1"/>
          <ref bean="annouce2"/>
          <ref bean="annouce3"/>
          <ref bean="annouce4"/>
   </util:list>

1 Ответ

6 голосов
/ 25 февраля 2011

Это стало для меня большим сюрпризом, но начиная с Spring 2.5 вы можете написать:

@Resource
private List<Announcement> announcements;

И Spring найдет все бины типа Announcement и внедрит их, используя список. Конечно, старая школа получения бобов вручную все еще применяется:

@Resource
private ApplicationContext ctx;

@PostConstruct
public void init() {
    Map<String, Announcement> announcementsBeans = ctx.getBeansOfType(Announcement.class);
    List<Announcement> announcements = announcementsBeans.values();
}
...