Ioc和DIp(控制反转,依赖注入)用一句话来总结解释:原来是需要什么东西自己去拿,现在是需要什么东西就让别人送过来。
即:以前被依赖的对象需要自己创建,现在是Ioc容器帮助我们去注入对象,我们拿过来使用对象即可。
上图来源:spring揭秘
例:
public class NewsProvider{
private INewsHello hello;//被注入的INewsHello接口类型的对象hello
private INewsBy by;//被注入的INewsBy接口类型的对象by
public void print(){
...........
}
}
以前是:
public NewsProvider(){
this.hello = new NewsHello(); //使用相应接口实现类实例化INewsHello对象
this.by = new NewsBy();//如上
}
三种注入方式:
- 构造方法注入(constructor injection):
就是被注入对象可以通过在其构造方法中声明依赖对象的参数列表,让IOc知道需要哪些对象依赖
public NewsProvider(INewsHello hello,INewsBy by){
this.hello = hello;
this.by = by;
}
2. setter方法注入(setter injection):
就是通过setter方法为其依赖对象赋值
public void setHello(INewsHello hello){
this.hello = hello;
}
public void setBy(INewsBy by){
this.by = by;
}
3. interface 注入(不常用,知道有就可以):
注:总结来自《spring揭秘》