《Spring从入门到精通》第三章 Spring基础概念

3.1 反向控制/依赖注入

3.1.1 反向控制(IOC)
反向控制是一种模式,决定着容器装配组件的方式,通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做。
“实现必须依赖抽象,而不是抽象依赖实现”就是“反向控制的一种表现方式”,类似于面向接口编程。

3.1.2 依赖注入(DI)
Martin Fowler探究了“反向控制”的原理,提出“它们反转了哪方面的控制”的问题后,并为其起了一个新名字“依赖注入”。
含义:通过Spring容器帮我们new指定实例并且将实例注入到需要该对象的类中(通过Bean)。
全称:Inversion of Control 反向控制
Dependency Injection 依赖注入

3.2 依赖注入的3种实现方式

3.2.1 接口注入(interface injection)
如果要完成依赖关系注入的对象,必须实现IBusiness接口。

public interface IBusiness{
    public void createDI(DataBase db);
}

public class Business implements IBusiness{
    private DataBase db;
    public void createDI(DataBase db){
        this.db=db;
    }

    public void getData(){
        db.getData();
    }
}

public class TestBusiness{
    private Business bus=new Business();

    public void getData(){
        business.createDI(new OracleDataBase());
        business.getData();
    }
}

3.2.2 Set注入(setter injection)
用set方法注入

public class Business implements IBusiness{
    private DataBase db;
    public void setDataBase(DataBase db){
        this.db=db;
    }

    public void getData(){
        db.getData();
    }
}

3.2.3 构造注入(constructor injection)
用构造方法注入

public class Business implements IBusiness{
    private DataBase db;
    public Business(DataBase db){
        this.db=db;
    }

    public void getData(){
        db.getData();
    }
}

3.3将HelloWorld示例改为构造注入方式实现

3.3.1 修改HelloWorld.java
3.3.2 修改config.xml

<beans>
    <!--定义一个Bean -->
    <bean id="HelloWorld" class="com.gc.action.HelloWorld">
        <constructor-arg index="0">
            <value>HelloWorld
            </value>
        </constructor-arg>
    </bean>
</beans>
  • constructor-arg 用来表示是通过构造方式来注入参数的。
  • index=”0” 表示是构造方法中的第一个参数,如果只有一个参数,可省略

3.3.3 编写测试程序TestHelloWorld.java
3.3.4 运行测试程序并查看输出结果

3.4 使用哪种注入方式

在对象建立时就准备好所有的资源,使用构造注入;在对象建立好后,使用set注入来进行设定。

  • 构造注入在生成实例时把实例与参数之间的依赖关系一同建立。如果参数很多,不便记忆。
  • set有明确的名称

3.5 小结

spring的核心是个IOC容器,用户可以用构造注入或set注入的方式来实现自己的业务对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值