IOC的类型
- 构造函数注入
- 属性注入
- 接口注入
构造函数注入
在构造函数注入中,通过调用类的构造函数,将接口实现类通过构造函数变量传入:
public class MoAttack{
private GeLi geli;
//1、注入隔离的具体饰演者
public MoAttack(GeLi geli){
this.geli=geli;
}
public void cityGateAsk(){
geli.responseAsk("墨者革离");
}
}
MoAttack的构造函数不关心具体由谁来饰演革离这个角色,只要在1处传入的饰演者按剧本的要求完成相应的表演即可,角色的具体饰演者由导演来安排:
public class Director{
public void direct(){
//1、指定角色的饰演者
GeLi geli = new LiuDeHua();
//2、注入具体饰演者到剧本中
MoAttack moAttack = new MoAttack(geli);
moAttack.cityGateAsk();
}
}
在1处导演安排刘德华饰演革离,并在2处将刘德华注入到墨攻剧本中,然后开始城门叩问的剧情。
属性注入
虽然革离是影片《墨攻》的第一主角,但并非每个场景都需要革离的出现,在这种情况下通过构造函数注入并不妥当,这时可以考虑属性注入。
public class MoAttack{
private GeLi geli;
//1、属性注入方法
public void setGeli(GeLi geli){
this.geli=geli;
}
public void cityGateAsk(){
geli.responseAsk("墨者革离");
}
}
导演通过Setter方法注入革离角色:
public class Director{
public void direct(){
MoAttack moAttack = new MoAttack();
//1、调用属性Setter方法注入
GeLi geli = new LiuDeHua();
moAttack.setGeli(geli);
moAttack.cityGateWayAsk();
}
}
通过构造函数注入革离饰演者不同,在实例化MoAttack剧本时,并未指定任何饰演者,而是在实例化MoAttack后,需要革离出场时,才调用其setGeli方法注入饰演者。这样导演可以根据所拍摄剧段的不同,按需注入相应的角色。