切点表达式的写法
表达式语法:execution([修饰符] 返回值类型 包名.类名.方法名(参数))
- 访问修饰符可以省略
- 返回值类型,包名,类名,方法名可以使用星号*代替
- 包名与类名之间一个点.代表当前包下的类,两个点..代表当钱包及其子包下的类
- 参数列表可以使用两个点..表示任意个数,任意类型的参数列表
例如:
- execution(public void com.lsc.aop.Target.method())
- execution(void com.lsc.aop.Targect.*(..))
- execution(* com.lsc.aop.*.*(..))
- execution(* com.lsc.aop..*.*(..))
- execution(* *..*.*(..))
通知的类型
通知的配置语法:<aop:通知类型 method="切面类中方法名" pointcut="切点表达式"></aop:通知类型>
名称 | 标签 | 说明 |
---|---|---|
前置通知 | <aop:before> | 用于配置前通知,指定增强的方法在切入点方法之前执行 |
后置通知 | <aop:after-returning> | 用于配置后通知,指定增强的方法在切入点方法之后执行 |
环绕通知 | <aop:around> | 用于配制环绕通知,指定增强方法在切入点方法执行之前,之后都执行 |
异常抛出通知 | <aop:throwing> | 用于配制一场抛出通知,指定增强的方法在抛出异常时执行 |
最终通知 | <aop:after> | 用于配制最终通知,无论增强方法执行是否有异常都会执行 |
切点表达式的抽取
当多个增强的切点表达式相同时,可以将切点表达式进行抽取,在增强中使用pointcut-ref属性代替pointcut属性来引用抽取后的切点表达式
<aop:config>
<aop:aspect ref"myAspect">
<aop:pointcut id="myPointcut" expression="execution(* com.lsc.aop.*.*(..))"/>
<aop:before method="before" pointcut-ref="myPointcut"></aop:before>
</aop:aspect>
</aop:config>