面向切面编程AOP

aop里有切点,切面,通知的概念

Term 术语
Definition 定义
Concern A particular issue
(关注特定问题)
感兴趣应用的特定问题、概念、范围。例如,事务管理、持久化、日志、安全等。
Crosscutting Concern
(横切关注点)
在关注点实现中贯穿了很多类,这在面向对象(OOP)中通常很难实现和维护。
Aspect
(切面)
模块化的横切关注点,通过代码的聚合和隔离实现。
Join Point
(连接点)
在程序或者类执行时的一个点。在Spring的AOP实现中,连接点总是一个方法调用。其他的例子包括访问字段(包括实例中字段的读写),变量和异常处理。
Advice
(通知)
特定连接点所采取的动作。Spring有几种不同类型的通知,包括around、before、throws和after returning。在这几种类型的通知中,around是最强大的,在方法调用的前后都有执行一些操作的机会。之前用到的TraceInterceptor就是around类型的通知,它实现了AOP联盟的MethodInterceptor接口。通过实现下面的Spring接口可以使用其他类型的通知:
Ø         MethodBeforeAdvice
Ø         ThrowsAdvice
Ø         AfterReturningAdvice
Pointcut
(切入点)
连接点的集合,这些连接点确认何时一个通知将会触发。切入点通常使用正则表达式或者是通配符语法。
Introduction
(引入)
添加字段或者方法到一个通知类。Spring允许你在任何通知对象上引入新的接口。例如,你可以使用引入以便让任意对象实现IsModified接口,来简化缓存。
Weaving
(组织)
装配切面来创建一个被通知对象。可以在编译期间完成(像AspectJ做的那样)也可以在运行时完成。本章后面的组织策略部分详细讨论不同的组织策略(也就是实现AOP)。
Interceptor
(拦截器)
一种AOP实现策略,对与特点的连接点,可能存在一个拦截器链。
AOP Proxy
(AOP代理)
AOP框架创建的对象,包括通知。在Spring中,一个AOP代理可能是JDK动态代理或者是CGLIB代理。
Target Object
(目标对象)
包含连接点的对象。在使用拦截的框架中,它是在拦截器链末端的对象实例。也叫做被通知对象或者被代理对象。

切面。 用个比喻会更形象一些。可以把切面理解成一把菜刀,而其他方法就好像是黏糕,如果你要把所有的黏糕都在某个
位置切断,那么就用这个菜刀就行了。这个菜刀,就是我们需要的切面类。

切入点。切入点一般是一个表达式。用上面的例子来说,就是我们对哪些黏糕“下手”。

例如 execution(* com.xyz.someapp.service.*.*(..))

通知。 通过切入点,我们知道要对哪些黏糕下手,但是,我们还得知道要在黏糕的哪个位置下手,是在头部(Before),
尾部(After),还是首尾(Around)等等。

最形象的例子,就是如果你想给所有的DB操作类都加上一个特殊的log,怎么弄呢?是修改所有的DB操作类,还是写一个类,就能让这个类的方法嵌入到所有的DB操作类中?

给哪些类在哪个位置“插入”一些本来没有的代码

这些“插入”的代码都是程序运行的时候动态插入的,所以看起来很神奇


有两种方式,一种是java本身提供了动态代理方式,这种方式基于接口;另一种是cglib这样的,动态修改java运行时的字节码

首先通过切入点来确定要切入到哪些类里
例如
execution(* com.xyz.someapp.service.*.*(..))

然后使用“通知”,确定切入的地点:是在头部(Before),
尾部(After),还是首尾(Around)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值