设计模式——控制反转

6. 控制反转

前边的模板方法的回调,就是一种控制反转的应用

import java.sql.ResultSet;

public class SimpleJdbcQueryTemplate {
    public <T> T query(String queryString , ResultSetHandler<T> rsHandler){
        //回调
        return rsHandler.handle(rs);
    }
}

return rsHandler.handle(rs);这条语句决定了控制逻辑,可以动态的改变rsHandler对象,不同的ResultSetHandler的实现类的方法也可能不同,所以这样根据query方法接受的ResultSetHandler对象来决定handle方法究竟执行什么内容。这就是一种控制反转。

我们经常把控制逻辑写在其他地方例如Framwork而非客户化的代码里,这样就可以更专注地于客户化的逻辑,也就是说,外部逻辑负责调用客户化的逻辑,这样就可以更专注于客户化的逻辑。在软件领域中,我们给他取了一个名字叫控制反转(IoC)。

我理解的控制反转就是把对对象的创建及对象的属性和方法的内容的控制抽离出来,不让控制逻辑出现在对象内部,让控制权回到程序员的手里。比如Spring 用xml控制对象的属性。

框架如果没有实现IoC,那么就是一个工具库。使用工具库,必须得撰写调用它们的逻辑,每次调用它们都会完成相应的工作,并把控制权返回给调用者,而框架不需要客户程序撰写控制程序的调用逻辑,由框架专门负责。

依赖注入

依赖注入是实现控制反转的方法。

拿Spring的xml的方式注入举例,这个是配置连接数据库的配置文件。

这干了啥,是不是把DriverManagerDataSource对象所需要的成员变量配置了?这就是依赖注入,说白了就是从DriverManagerDataSource外面,给他赋值。

<beans>
    <!-- picks up and registers AppConfig as a bean definition -->
    <context:component-scan base-package="com.acme"/>
    <context:property-placeholder location="classpath:/com/acme/jdbc.properties"/>

    <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
</beans>

Spring主要有三种注入,构造器注入,setter注入,注解注入。

实际上依赖注入不止这些比如:接口注入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值