IOC三种依赖注入的方式,以及区别

构造方法注入(constructor injection)

构造方法中声明依赖对象的参数列表,让IoC容器知道它需要哪些依赖对象。

此方法比较直观,对象构造完成后,即进入就绪状态,可以马上使用。

public FXNewsProvider(IFXNewsListener newsListner,IFXNewsPersister newsPersister)
{
    
    
    this.newsListener = newsListner;
    this.newPersistener = newsPersister; 
}

setter 方法注入(setter injection)

只需要为依赖对象所对应的属性添加setter方法,就可以通过setter方法将相应的依赖对象设置到被注入对象中。

比构造方法注入宽松一些,可以在对象构造完成后再注入。

public class FXNewsProvider
{
    
    
    private IFXNewsListener newsListener;
    private IFXNewsPersister newPersistener;
    public IFXNewsListener getNewsListener() {
    
    
        return newsListener;
    }
    public void setNewsListener(IFXNewsListener newsListener) {
    
    
        this.newsListener = newsListener;
    }
    public IFXNewsPersister getNewPersistener() {
    
    
        return newPersistener;
    }
    public void setNewPersistener(IFXNewsPersister newPersistener) {
    
    
        this.newPersistener = newPersistener;
    }
}

接口注入(interface injection)

被注入对象如果想要IoC Service Provider为其注入依赖对象,就必须实现某个接口。这个接口提供一个方法,用来为其注入依赖对象。IoC Service Provider最终通过这些接口来了解应该为被注入对象注入什么依赖对象。

接口注入比较死板和繁琐,是现在不甚提倡的一种方式,“退役”选手。

三种方式比较

注入方法 优缺点
构造方法注入 构造方法注入的优点是当对象构造完成之后,就能够处于就绪状态,能够提供使用,而缺点在于如果对象太多,或者某个对象的参数多而复杂的话,构造方法就很繁琐,并且维护也是有较大的困难
setter方法注入 主要体现在性能方面,因为方法可以自定义命名,描述也就更加人性化了,可以有默认值设置。不足的地方可能就是不能立即使用该对象
接口注入 入侵性太强,如果需要注入依赖对象,被注入对象必须声明和实现另外的接口。不提倡这种方法

猜你喜欢

转载自blog.csdn.net/weixin_42648692/article/details/129385655
今日推荐