Spring揭秘-2.IOC容器

定义

IoC (Inversion of Control)控制反转,别名依赖注入(Dependency Injection)
例子
我们最初的程序是如果我们需要一个对象提供服务

public FXNewsProvider(){
	newsListener = new DowJonesNewsListener();
	newPerListener = new DowJonesNewsPersister();
}

IOC 的三种注入

IoC 的 主要思想是将自己需要的依赖类不需要自己new ,变成 IoC Service Provider 提供,只需要你需什么,我们就提供什么。
注入的方式有三种

  1. 构造方法注入
    会发现没有自己new IFXnewsListener 对象 ,而且可以需要什么样的具体实现类可以自己注入
public FXNewsProvider(IFXnewsListener newsListner,IFXNewsPersister newsPersister){
	this.newsListener = newsListner;
	this.newPerListener = newsPersister;
}
  1. setter注入
    set的好处是 不需要像构造方法注入那样,让对象构造完后即可使用,但相对来说更宽松一些,想需要什么类型set什么类型
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 newsPersister){
		this.newsPersister= newsPersister;
	}
}
  1. 接口注入
    相对于前两种注入方式来说,接口注入没那么简单,要实现IoC Service Provider 为其注入依赖对象,就必须实现某些接口。这个接口提供一个方法,用来注入依赖对象。IoC Service Provider 最终通过这些接口来了解应该为被注入对象注入什么以来。 不常用

在这里插入图片描述

三种注入比较

  • 接口注入。从注入方式的使用上来说,接口注入是现在不甚提倡的一种方式,基本处于“退 役状态”。因为它强制被注入对象实现不必要的接口,带有侵入性。而构造方法注入和setter 方法注入则不需要如此。
  • 构造方法注入。这种注入方式的优点就是,对象在构造完成之后,即已进入就绪状态,可以 9 马上使用。缺点就是,当依赖对象比较多的时候,构造方法的参数列表会比较长。而通过反 射构造对象的时候,对相同类型的参数的处理会比较困难,维护和使用上也比较麻烦。而且 在Java中,构造方法无法被继承,无法设置默认值。对于非必须的依赖处理,可能需要引入多 个构造方法,而参数数量的变动可能造成维护上的不便。
  • setter方法注入。因为方法可以命名,所以setter方法注入在描述性上要比构造方法注入好一些。 另外,setter方法可以被继承,允许设置默认值,而且有良好的IDE支持。缺点当然就是对象无法在构造完成后马上进入就绪状态。

IOC上的附加值

新的要求 构建在IoC之上可重用的FXNewsProvider

FXNewsProvider dowJonesNewsProvider = new FXNewsProvider(new DowJonesNewsListener(),new DowJonesNewsPersister());
转变为
FXNewsProvider dowJonesNewsProvider = new FXNewsProvider(new Marker24NewsListener()(),new Marker24NewsPersister());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值