初识AOP
来源:互联网 发布:turtlebot编程 编辑:程序博客网 时间:2024/06/08 01:00
AOP的英文全称是Aspect Oriented Programming,称为面向切面或者方面的编程,其实这不是Spring的首创,但Spring引入AOP,那AOP肯定在编程效率提升上有其过人之处。现在以银行开户来看看AOP如何帮我们解决问题。
银行开户业务分为下面三步:
- 身份验证
- 开户
- 创卡
客户类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(切面),切入到我们实际的业务中,就像刚才的例子,我们再也不用管公共服务的调用了,让别人去想办法切入吧,我们就关心自己的业务即可。
3 0
- 初识AOP
- 初识AOP
- AOP初识
- 初识AOP
- 初识--AOP
- 初识AOP
- 初识IoC、DI、AOP
- Spring中AOP初识
- Spring 4初识aop
- 初识Spring——AOP
- 注解式 Spring AOP初识
- 初识AOP面向切面编程
- Spring揭秘(十)——初识AOP
- 初识
- 初识
- 初识
- AOP
- AOP
- Trying to dismiss the presentation controller while transitioning already
- 电脑使用问题解决Point
- 在导航栏添加搜索框
- FZU 2214 Knapsack problem (01背包)
- Java制作证书的工具keytool用法总结 (转载)
- 初识AOP
- 程序优化方法——CSAPP 读书笔记
- 买车注意事项
- Python代码优化及技巧笔记(一)
- mysql(一)
- C语言极简入门-VC6.0极速安装-2
- Swift变量和常量
- vi/vim基本使用方法
- ios NSNotificationCenter消息通讯机制