【Spring揭秘】Spring IOC基本概念

IOC基本概念

IOC概念

IOC(Inversion of Control),即控制反转(或依赖注入)

IOC理念

让别人为你服务。(简单来说就是从自己主动去获取依赖变为依赖自动装配完成)

IOC依赖注入方式

  1. 构造方法注入(常用)

IOC Service Provider 会去扫描对象的构造方法,将构造方法中声明的对象进行注入

public FXNewsProvider(IFXNewsListener newsListner,IFXNewsPersister newsPersister){
    this.newsListener = newsListner;
    this.newPersistener = newsPersister;
}
  1. setter方法注入(常用)

可以通过调用 setNewsListener 和 setNewPersistener 方法为 FXNewsProvider 对
象注入所依赖的对象

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;
    }       
}
  1. 接口注入(基本废弃)

这种注入方式基本已被废弃,因为接口注入要求被注入对象必须实现一个接口,在接口中提供一个方法,方法参数即为要注入的依赖,实现方式比较繁琐和死板,对代码的侵入性很强。

IOC Service Provider

IoC Service Provider 的职责

业务对象的构建管理

所有对象都交由Spring进行创建

业务对象间的依赖绑定。

将所构建对象的依赖对象自动注入,使所构建对象处于就绪、可被调用状态。

IoC Service Provider如何管理对象间的依赖关系

直接编码方式
IoContainer container = ...;
container.register(FXNewsProvider.class,new FXNewsProvider());
container.register(IFXNewsListener.class,new DowJonesNewsListener());
...
FXNewsProvider newsProvider = (FXNewsProvider)container.get(FXNewsProvider.class);
newProvider.getAndPersistNews();
配置文件方式
<bean id="newsProvider" class="..FXNewsProvider">
    <property name="newsListener">
        <ref bean="djNewsListener"/>
    </property>
    <property name="newPersistener">
        <ref bean="djNewsPersister"/>
    </property>
</bean>
<bean id="djNewsListener" class="..impl.DowJonesNewsListener"></bean>
<bean id="djNewsPersister" class="..impl.DowJonesNewsPersister"></bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值