继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

骑士传奇(上)--Spring的IOC和AOP

时间啊
关注TA
已关注
手记 19
粉丝 97
获赞 582

这是一个非常老套的骑士冒险故事

骑士出世

伟大的人物出生时,都会伴随天地异象,我们的骑士也不例外,骑士出生时,天地间代码纷飞。

package com.knightlegend.spring;

public class Knight {
    //骑士出生就是为了营救公主
    private RescueMission RescueMission;
    public Knight() {
        //紧耦合
        this.RescueMission = new RescueMission();
    }
}
package com.knightlegend.spring;

public class RescueMission {
}

好的,就这样我们的白板骑士号就创建好了。

新手任务

王国的公主被恶龙抓走了,我们骑士的使命来临了,就在骑士准备出发营救公主之际,邻居家大妈的鸡丢了,拜托我们的骑士帮她找回她丢失的母鸡,这,这简直是so easy,骑士满口答应下来,打开自己的技能面板...

紧急修复...

package com.knightlegend.spring;

public class CatchChicks {
    // 技能 捉小鸡...
}
package com.knightlegend.spring;

//骑士面板
public class Knight {
    //骑士出生就是为了营救公主
    private RescueMission RescueMission;
    // 紧急修复,添加捉小鸡技能
    private CatchChicks catchChicks;
    public Knight() {
        //紧耦合
        this.RescueMission = new RescueMission();
        this.catchChicks = new CatchChicks();
    }
}

修复完成...(以后不能让骑士去接这种掉身价任务了)

哈哈,我们的骑士果然是无所不能的,天生自带捉小鸡技能...
使用技能捉小鸡...
捕获邻居家母鸡一只...(不要在意这些细节)
bingo,任务完成...

新手任务二

隔壁的老奶奶缓缓的走向骑士,我家的小孙子一天都没回来了,你能帮我找找看吗?
这个,这个..
紧急修复,紧急修复...
骑士天赋技能升级

package com.knightlegend.spring;

public interface Quest {
    // 骑士天赋:搞事情
    // 效果:心想事成
}
package com.knightlegend.spring;

//骑士面板
public class Knight {
    //我们的骑士是个挂比
    private Quest quest;
    public Knight(Quest quest) {
        //quest 被注入进来,构造器注入
        this.quest = quest;
        //Quest 搞事情接口,骑士不与具体事情的实现 发生耦合,
        //只实现搞事情接口,这就是依赖注入(DI)的最大收益:松耦合
    }
}
package com.knightlegend.spring;
//骑士技能
public class FindGrandchildren implements Quest{
    //骑士技能三:找小孙子
}

package com.knightlegend.spring;
//骑士技能
public class CatchChicks implements Quest{
    // 骑士技能二:捉小鸡...
}

package com.knightlegend.spring;
//骑士技能
public class RescueMission implements Quest{
    //骑士技能一:救公主
    //...
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

    <bean id="knight" class="com.knightlegend.spring.Knight">
        <constructor-arg ref="quest"/>
    </bean>
    <!-- 将救公主技能装配给骑士 -->
    <bean id="quest" class="com.knightlegend.spring.RescueMission">
    </bean>
    <!--... 略-->
</beans>

修复说明:通过构造器注入,将搞事情接口注入进入骑士面板,实现了骑士面板与技能的松耦合,这样骑士每次接受到新的任务时,就不用修改骑士面板代码,只需新增相对应的任务技能,装配给骑士即可。
这就是 Spring 的 IOC(Inversion of Control-IOC),控制反转,通过依赖注入(DI)实现,容器负责创建对象和维护对象之间的依赖关系,帮助应用对象之间保持松散耦合。
可与之前实现方法作对比。
bingo,修复完成(以后任何任务来了都不怕啦)
使用技能找孙子...
成功找到隔壁老奶奶孙子...
任务完成。

新的征程

终于完成了新手任务,我们的骑士也将踏上新的征程

那就下期再会吧!

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP