Spring学习(3)-认识AOP

认识AOP

是什么?能干什么?怎么用?怎么用得更好?
关系:面相切面编程(AOP)是面相对象编程(OOP)的补充。
在OOP中,最小建模单元是class,在AOP中最小单元则是切面。
概念: 切面(aspect)
理解一个概念,最好的方式,是学习例子。下面用一个例子来进行学习。
Jack如何将大象放进冰箱呢?
只需要三步:1.打开冰箱 2.放入大象3.关上冰箱

Person jack = new Person("Jack");
putElephantIntoRefridg();

public static void putElephantIntoRefridg(){
    System.out.println("Jack open the refridge");   
    System.out.println("Jack put an elephant into the refridge");
    System.out.println("Jack close the refridge");
}

好的,这个太死了,升级一下。加几个参数灵活配置。
这样一来,无论谁都可以想放什么就放什么啦。

Person Jack = new Person("jack");
putSthIntoRefridge(Jack.getName(), "elephant");
putSthIntoRefridge(Jack.getName(),"");
...
//放东西到冰箱里
public static void putSthIntoRefridge(String operatorName, String sth){
    beforePut(operatorName);
    System.out.println(operatorName +" put "+ sth +"into refridge");
    afterPut(operatorName);
}
//开冰箱
public static void beforePut(String operatorName){
    System.out.println(operatorName +" open the refridge");
}
//关冰箱
public static void afterPut(String operatorName){
    System.out.println(operatorName +" close the refridge");
}

一定程度上的将开关冰箱的代码从业务代码(放进冰箱)抽取了出来。
还是扩展性不足。比较局限。
比如,Jack接下来要出远门。放完以后,还要求检查电费是否充足,不够就充钱。避免电费不够,自动断电以后,冰箱里的东西坏掉了。(很多智能电表已经是充多少用多少了)
那这种情况下,只能改原来的代码,加一个CheckFees()步骤。

我的理解中。AOP就是为了更好配置管理,这种,和业务逻辑无关,但又不得不做、有规范流程的代码。比如事务管理。

结合例子,对应起来。
开涛的跟我学Spring
开涛大哥的博客里,就有对术语的浅显化解释。我们也应当有自己的理解。

  • Aspect 切面。可以根据各个类中的切点匹配,横切多个类
  • Join point 切点,程序执行点。通常是方法执行前后。
  • Advice 切面在某个切点执行的动作。有几种类型:”around”,”before”,”after”
  • Pointcut 切点表达式。类似与正则表达式,匹配方法名,来切入。
  • Introduction 声明额外的方法或者属性。用这个来给被切的对象增加继承接口
  • Target object 被切面进而被增加方法调用的类,been advised object。
  • AOP proxy AOP代理类
  • Weaving 织入可以是在编译期,装载期,运行期。Spring是在运行期织入。

Advice的几种类型

  • Before advice
    前置增强。切点前执行,除非抛出异常,否则就按顺序执行切点
  • After returning advice
    后置增强1。在切点正常执行后执行(切点处未抛出异常)
  • After throwing advice
    抛出增强。切点方法抛出异常时执行
  • After (finally) advice
    后置增强2。切点方法完成后执行,不管是否抛出异常
  • Around advice
    环绕增强。最牛啤。可以在方法前后增强,也可以通过其返回值,来选择性执行增强方法,或切点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值