1.当调用者需要被调用者的协助时,通常由调用者来创建被调用者的实例。例如:
publlic class DamselRescuingKnight implements Knight {
private RescueDamselQuest quest;
public DamselRescuingKnight() {
this.quest = new RescueDamselQuest();
}
public void embarkOnQuest() {
quest.embark();
}
}
问题:DamselRescuingKnight和RescueDamselQuest紧密的耦合,限制了DamselRescuingKnight的处理能力;
依赖注入的实现方式:
publlic class DamselRescuingKnight implements Knight {
private Quest quest;
public DamselRescuingKnight(Quest quest) {
this.quest = quest;
}
public void embarkOnQuest() {
quest.embark();
}
}
分析:依赖通过构造器参数注入,且依赖变成了接口,接口可以用不同的具体实现进行替换,扩展DamselRescuingKnight处理能力;
2.在Spring中,对象无需自己查找依赖的对象,Spring容器负责把需要相互协作的对象引用赋予各个对象。
Spring中有3种装配Bean的方法:
1.在XML中显示配置;
2.在Java中显示配置;
3.隐式的bean发现机制与自动装配;
只讲解2,3点
3.@Component @ComponentScan @Autowired注解实现
2.@Configuration @Bean注解实现