Spring AOP(暂)

本文详细介绍了AOP的概念及其在Spring框架中的应用。包括Advice、PointCut、Advisor等核心概念的解析,并深入探讨了SpringAOP的实现机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AOP有标准化的定义.

通俗解释AOP:面向所关心方面的编程.(比如,在系统中如果需要对每个操作做RoleCheck,则可以建一个类RoleCheck,来管理这个方面)

 

 

Spring AOP是实现AOP的一种方式.

 

AOP的几个概念:

 

1 Advice:

        即你在关注点所想做的一些动作,如你需要RoleCheck时进行的操作.( org.aopalliance.intercept.Advice)

分类:

MethodInterceptor         (org.aopalliance.intercept.MethodInterceptor)

Advice                               org.aopalliance.aop.Advice

---BeforeAdvice   extends Advice   org.springframework.aop.BeforeAdvice          在目标方法被调用之前调用
    public Object invoke(MethodInvocation mi) throws Throwable {

        //先调用before方法,这是实现BeforeAdvice接口的类, 然后再调用余下的advice

        // before方法内容 即自定义在目标方法被调用之前要做动作

        this.advice.before(mi.getMethod(), mi.getArguments(), mi.getThis() );
        return mi.proceed();
    }

 

---AfterAdvice extends Advice     org.springframework.aop.AfterReturningAdvice    在目标方法被调用之后调用

public Object invoke(MethodInvocation mi) throws Throwable {

        //先调用在这个advice之前的advice,   后调用afterReturning方法,这是实现AfterAdvice接口的类,

        // afterReturning() 函数内容即自定义在目标方法被调用之后要做的动作

        Object retVal = mi.proceed();
        this.advice.afterReturning(retVal, mi.getMethod(), mi.getArguments(), mi.getThis());
        return retVal;
    }

 

---ThrowsAdvice   extends Advice     org.springframework.aop.ThrowsAdvice         在目标方法抛出异常时调用

 

2. PointCut

     指的是需要关注的点.即需要增加所定义的advice的点.如你需要在调用viewlist()前进行RoleCheck,那这个viewlist()就是一个pointcut

 

3.Advisor

     由定义切面的advice和定义切面在什么地方执行的pointcut而成的就是Advisor。

 

4.生成AopProxy

   .....待

 

5.Spring AOP Interceptor 调用的过程.(jdk动态代理方式实现)

1当目标函数被调用时,由于jdk的动态代理. 进入JdkDynamicAopProxy.invoke(){

(1). 得到targetSource,即被关注的函数

(2). 得到 intercetion chain,即定义的advice

(3).判断chain,如果为空,直接invokeJoinpoint,否则生成invocation,然后invoke这些advice.

2. 进入 ReflectiveMethodInvocation.proceed(), 然后会一次进入beforeAdvice或afterAdvice,递归调用其中的proceed,

3.当递归进入到proceed(),发现所有interception chain中的advice已经处理完,调用 invokeJoinPoint(),

 

4. 完成后, 递归返回.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值