Spring框架最强大的一个重点是依赖注入概念.我理解其中的一个建议是将一般的高级机制与低级细节分开(如依赖性倒置原则所宣布的那样).
从技术上讲,这可以归结为让bean实现尽可能少地了解作为依赖项注入的bean,例如
public class PrintOutBean {
private LogicBean logicBean;
public void action() {
System.out.println(logicBean.humanReadableDetails());
}
//...
}
<bean class="PrintOutBean">
<property name="loginBean" ref="ShoppingCartBean"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
但是,如果我想要一个在多个依赖bean上运行的高级机制呢?
public class MenuManagementBean {
private Collection<Option> options;
public void printOut() {
for (Option option:options) {
// do something for option
}
//...
}
}
Run Code Online (Sandbox Code Playgroud)
我知道一个解决方案是@Autowired在单例bean中使用注释,即......
@Autowired
private Collection<Option> options;
Run Code Online (Sandbox Code Playgroud)
但它不违反分离原则吗?为什么我必须在我使用它们的同一个地方指定依赖者(即MenuManagementBean我的例子中的类)?有没有办法像这样在XML配置中注入bean集合(在MMB类中没有任何注释)?
<bean class="MenuManagementBean">
<property name="options">
<xxx:autowire by-type="MyOptionImpl"/>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)