|
ioC是Spring容器的内核,AOP、声明式事物等功能都依赖于此功能,它涉及代码解耦、设计模式、代码优化等问题的考量,我们将通过以下几方面来深入理解ioC:
1、ioC的初步理解;
2、ioC的注入类型;
3、ioC的注入方式;
ioC的注入类型:
1、构造函数注入:通过调用类的构造函数,将接口实现类通过构造函数变量传入。
public class Wujiandao{
private Liujianming lim;
public Wujiandao(Liujianming lim){
this.lim=lim;
}
public void tianTai(){
lim.declare("我想做一个好人");
}
}
public class Director{
public void direct(){
Liujianming lim=new Liudehua();
Wujiandao wjd=new Wujiandao(lim);
wjd.tianTai();
}
}
2、属性注入(推荐):通过Setter方法完成调用类所需依赖的注入,更加灵活方便,不像构造函数注入必须一开始就执行。
public class Wujiandao{
private Liujianming lim;
public void setLim(Liujianming lim){
this.lim=lim;
}
public void tianTai(){
lim.declare("我想做一个好人");
}
}
public class Director{
public void direct(){
Liujianming lim=new Liudehua();
Wujiandao wjd=new Wujiandao();
wjd.setLim(lim);
wjd.tianTai();
}
}
3、接口注入:将调用类所有依赖注入的方法抽取到一个接口中,调用类通过实现该接口提供相应的注入方法。
public interface ActorArrangable{
void injectLim(Liujianming lim);
}
public class Wujiandao implements ActorArrangable{
private Liujianming lim;
public void injectLim(Liujianming lim){
this.lim=lim;
}
public void tianTai(){
lim.declare("我想做一个好人");
}
}
public class Director{
public void director(){
Liujianming lim = new Liudehua();
Wujiandao wjd = new Wujiandao();
wjd.injectLim(lim);
wjd.tianTai();
}
}
spring作为一个容器,通过配置文件或者注解描述类和类之间的依赖关系,自动完成类的初始化和依赖注入的工作,下面是对以上实例进行配置的配置文件片段:
//1、实现类实例化
//2、通过lim-ref建立依赖关系
|