spring in action笔记(一)——why spring

当初学spring的时候自己抱着两本书啃的,一个是李刚老师的企业级ssh框架那本类似于培训的书籍,另一本就是Craig Wall的《spring in action》。当初学的时候急于使用,构建出一个像样的工程出来,所以很多地方并不是很清楚,以致于工作之后用的多自己搭建的少所以很快就忘了很多原理上的东西。最近刚好要自己用一个springmvc的东西,所以就重温了《spring in action》这本书,边看边记录一下一些之前没注意到的东西。

第一章里边儿介绍了spring的一些基本思想,举了几段代码做例子,先抄录如下
code1:

public class DRKnight implements Knight{
    private RDQuest quest;
    public DRKnight(){
        this.quest = new RDQuest();
    }
    public void embarkOnQuest(){
        quest.embark();
    }
}

code2:

public class BKnight implements Knight{
    private RDQuest quest;
    public DRKnight(Quest quest){
        this.quest = new quest();
    }
    public void embarkOnQuest(){
        quest.embark();
    }
}

code2中Quest是一个接口,code2中RDQuest是一个类,然后两端代码对于quest的初始化方式不一样,这是主要的区别。

书中讲到code2跟code1的区别在于code2是松耦合的。耦合这个词如果没有理工科学习背景的话初看难理解,实际上我们可以把这个词替换成“联系”。code2把BKnight和Quest之间的联系变得浅了,即是书中讲到的松耦合。

基于以上的分析,现在我们来看看code2是如何淡化两个类之间的联系的。上面我们讲到两段代码的主要区别,第一点声明变量的时候原本的类变成了接口,这让我们同一段代码实现不同的业务逻辑变成可能,但是只有这一点还不够,这就是还存在第二个不同点的原因。在使用接口之后我们不能直接使用接口来创建对象,所以code2是使用构造器的方法传入一个对象进来,然后初始化quest变量。这样,当我们需要不同的Quest的时候修改完Quest实现类代码之后不需要再来修改BKnight代码,直接给BKnight类传入不同的构造器参数就可以了,无论Quest怎么变,BKnight都可以保持不变就可以达到预期的目的,淡化了两个类之间的联系,即作者所说的松耦合。

最后再回顾一下我们是如何解耦的,第一,面向接口,第二,使用构造器初始化变量,再加上后来还需要set方法初始化变量,在这两点的基础上spring实现了依赖注入,当然具体的代码实现是利用的java反射的相关知识。

先说这么多,不足之处还希望同好能够指出来,对于代码有疑问可以翻一翻Craig的原著,里边有这两段代码的具体含义,大致上就是勇士斩恶龙的一个故事的代码实现,太长了所以我只把代码copy过来了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值