aop 这个通过动态代理去理解其实很简单的,但是用xml 配置起来会显得有点麻烦,时间长不用也容易忘记配置所以记录下
aop是面向切片编程,只是一种编程规范没有规定具体实现的一种编程思想
aspectj是aop的实现的一种,也是当前最常用的一种,提供了5种切入点,使用的是静态代理方式实现的 在代理中有5个节点
begin try(){ after }catch (Exception e){after-throwing }finally{after-returning } 一整套就是around这个的方法可以从sping 中注入一个ProceedingJoinPoint对象实现aop
begin 时在执行前 after 执行后 after-throwing 异常时 after-returning 返回后 around 时实现上面四个
跟进源码可以看到底层使用了Cglib 实现的动态代理
可以打断点查看栈信息就能发现时或者通过在某个点上抛出一个异常并且打印就能看到他的具体栈帧信息
直接上配置
<aop:config> //aop配置开始
<aop:aspect ref="beanAdvisor"> <!-- 被加入到切入点的类 -->
<aop:pointcut id="pointUserMgr" expression="execution(* fun.ipconfig.apptest.*(..))"/> <!-- 定义切入点表达式 -->
<aop:before method="dobefore" pointcut-ref="pointUserMgr"/> <!-- method 执行加入到切入点的类的方法 pointcut-ref 来之那个表达式 -->
</aop:aspect>
</aop:config>