Как собрать и внедрить все bean-компоненты заданного типа в конфигурацию Spring XML
Одним из самых сильных акцентов весеннего каркаса являетсяВнедрение зависимости концепция. Я понимаю, что один из советов заключается в том, чтобы отделить общий механизм высокого уровня от деталей низкого уровня (как было объявленоПринцип обращения зависимостей).
Технически, это сводится к тому, чтобы иметь реализацию бина, чтобы знать как можно меньше о бине, вводимом как зависимость, например,
public class PrintOutBean {
private LogicBean logicBean;
public void action() {
System.out.println(logicBean.humanReadableDetails());
}
//...
}
<bean class="PrintOutBean">
<property name="loginBean" ref="ShoppingCartBean"/>
</bean>
Но что, если я хотел бы иметь механизм высокого уровня, работающий на нескольких зависимых бинах?
public class MenuManagementBean {
private Collection<Option> options;
public void printOut() {
for (Option option:options) {
// do something for option
}
//...
}
}
Я знаю, что одним из решений будет использование@Autowired
аннотация в синглтоне, то есть ...
@Autowired
private Collection<Option> options;
Но не нарушает ли это принцип разделения? Почему я должен указать, какие иждивенцы брать в том же месте, где я их использую (т.е.MenuManagementBean
класс в моем примере)? Есть ли способ внедрить коллекции bean-компонентов в конфигурацию XML, как это (без каких-либо аннотаций вMMB
учебный класс)?
<bean class="MenuManagementBean">
<property name="options">
<xxx:autowire by-type="MyOptionImpl"/>
</property>
</bean>