初识AOP

AOP的英文全称是Aspect Oriented Programming,称为面向切面或者方面的编程,其实这不是Spring的首创,但Spring引入AOP,那AOP肯定在编程效率提升上有其过人之处。现在以银行开户来看看AOP如何帮我们解决问题。

银行开户业务分为下面三步:

  1. 身份验证
  2. 开户
  3. 创卡

客户类Subs.java中有开户的方法,身份验证和创卡放到SubsOper中实现,因为实际业务比例子复杂得多,客户可能还会分很多种,不同种类的客户只是在开户流程上不一样,但是身份验证或者创卡都是一样的,因此只是将开户放到客户类中,其它的两个方法方到客户的操作类中。具体的设计如下:

Subs.java

public class Subs {
    public void createSub() {
        System.out.println("begin to create sub...");
    }
}

SubsOper.java

public class SubsOper {
    public void beforeCreateSub() {
        System.out.println("verify sub info before create sub...");
    }

    public void afterCreateSub() {
        System.out.println("create card after create sub...");
    }
}

写一个测试方法进行测试

 public void testApp()
    {
        SubsOper subsOper = new SubsOper();
        subsOper.beforeCreateSub();
        Subs subs = new Subs();
        subs.createSub();
        subsOper.afterCreateSub();
        assertTrue( true );
    }

测试结果和我们预期一致



能不能让开发人员只聚焦于开户的操作上,只负责完成好该部分的逻辑,身份验证和创卡这部分交给公共开发组去做,并且封装好后这部分的内容就不动了,最好就是做成可配置的,哪些开户操作是需要身份验证的,那么就做好针对这些操作的映射,哪些开户操作是要创卡就配置创卡,例如用户如果是用存折,就不需要创卡。这是完全可以有的,AOP就能帮我们实现梦想,只需在Spring配置文件中配置下面一段:


后面的before和after应该怎么配,不需要我赘述了。这个时候我们的测试方法变成了:

public void testAOP() {
        subs.createSub();
}

见证奇迹的时刻到了,就这么一行代码能得到和刚才一样的结果吗,答案是肯定的,和刚才的结果一模一样,不信你可以试试。后续我们可以将Subs做成一个接口,所有的客户,无论你是普通客户,还是VIP客户,或者是霸道总裁,都必须实现Subs接口,我们可以改写其中的createSub()方法,实现不同的开户逻辑,这样开发人员也无需去管什么验证,创卡这些杂七杂八的事情了,专注于自己应该专注的业务,其他的就交给其他的人去做吧,这样每天下午就有喝下午茶的时间了,晚上可以早早下班了,让加班成为回忆吧。

可能看到这里,基本上了解了AOP是干嘛的,至少明白了用了AOP后,我们要写的代码变少了很多,至少知道了很多事情是应该别人来帮我们完成,我们以前给别人干了不少活,所以我们总会觉得活得很累。但我想AOP必定有其伟大之处,不然也没必要搞这么高大上的名字,就像敏捷,XP(非windows系统,而是极限编程)这些概念那么流行,那么不明觉厉。看看下面两幅图吧。

我们过去的做法,抽象出了公共组件,并进行了分层,分为业务层和公共组件层,业务层的不同业务去调公共组件层的东西。


现在AOP的做法,将公共服务做成一个个pointcut(切面),切入到我们实际的业务中,就像刚才的例子,我们再也不用管公共服务的调用了,让别人去想办法切入吧,我们就关心自己的业务即可。



  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值