2017-02-13 3 views
0

Давайте предположим следующую ситуацию. В конфигурационном файле XML пружинной есть созданные бобы:Autowire @Resource из xml и использовать их для генерации списка фасолей

<bean id="a" class="com.example.A" /> 
<bean id="b" class="com.example.B" /> 
<bean id="c" class="com.example.C" /> 
<bean id="d" class="com.example.D" > 
    <property name="myList" ref="myListBean"> 
</bean> 

и файл конфигурации Java:

@Configuration 
@ImportResource("path/to/beans.xml") 
class JavaConfiguration { 
    @Resource 
    A a; 

    @Resource 
    B b; 

    @Resource 
    D d; 

    @Resource 
    C c; 

    @Bean 
    List myListBean(){ 
     List l = new ArrayList(); 
     l.add(a); 
     l.add(b); 
     l.add(c); 
     return l; 
    } 
} 

Из @Resource D D находится перед @Resource C с, Бина 'myListBean' будет содержать только { а, б, NULL}. Если я переключу его и @Resource C до D, тогда все будет в порядке. Есть ли хорошая практика, чтобы избежать этой ситуации, не зависит от порядка полей и не позволяет создавать список бобов с нулями?

+0

Если у вас есть класс конфигурации, я бы рекомендовал вам определить все ваши компоненты там, только потому, что он чище. Тем не менее, вы можете поместить флаг зависимости в свою декларацию. –

+0

Я полностью понимаю, что пример, который я показал здесь, не настолько хорош. Это выглядит частью старого кода в проекте, над которым я фактически работаю. Мне интересно, смогу ли я сделать это до сих пор. Мы будем делать рефакторинг в будущем, но это больший случай. –

ответ

0

Я не думаю, что есть способ сделать именно то, что вы хотите.

Вы не можете гарантировать, что C будет введена весной до myListBean, если между ними нет зависимости. Если вам нужен C, чтобы иметь правильный myListBean, тогда должна быть зависимость.

+0

Вот что я подумал. Я только задавался вопросом, есть ли способ заставить его. Спасибо за ответ. –

Смежные вопросы