美文网首页
spring-6-配置文件中声明切面

spring-6-配置文件中声明切面

作者: blank_white | 来源:发表于2020-06-22 19:29 被阅读0次
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

    <bean id="serverAspect2" class="com.spyouth.service.AspectServer"></bean>

    <aop:config proxy-target-class="true" >
        <aop:aspect id="myAspect" ref="serverAspect2">
            <aop:pointcut id="doSome" expression="execution(* com..*.do*(..))"/>
            <aop:before method="before" pointcut-ref="doSome" ></aop:before>
            <aop:around method="around" pointcut-ref="doSome"></aop:around>
            <aop:after-returning method="afterReturn" pointcut-ref="doSome" returning="result"></aop:after-returning>
            <aop:after method="after" pointcut-ref="doSome" ></aop:after>
            <aop:after-throwing method="afterThrowing" pointcut-ref="doSome" throwing="ex"></aop:after-throwing>
        </aop:aspect>
    </aop:config>
package com.spyouth.service;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;


//表明此类是一个注解类

public class AspectServer2 {

    // value 值为切入点,用 execution 表达式表示,
    // execution 写法搜索 execution 表达式

    //以方法名标记一种切入点

    public void cutPoint(){}

    //方法的名字自定义,参数列表自定义

    public void before(JoinPoint jp){
        System.out.println("Aspect before");

        //方法的参数如果设置了 JoinPoint ,则可以通过此变量获取关于切入点的一些属性
        jp.getSignature();
        jp.getSignature().getName();
        jp.getArgs();
    }

    //在方法执行前后都可以,和 jdk 动态代理的 invoke 方法相似
    //

    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("Aspect around before");
        //执行切入点方法,和 invoke 方法中的 method.invoke 类似
        //若果不加这句话,就不会执行切入点了
        Object o=pjp.proceed();
        System.out.println("Aspect around after");

        // o= "改变了";
        // 能更改切入点的返回值

        return o;
    }

    //在切入点返回后执行
    //切入点也可以用函数名,前提是前面的那个把函数名作为切入点 id 了

    public void afterReturn(Object result){
        System.out.println("Aspect after returning");

        //是把切入点的返回值赋给了 Object result
        //所以修改 result 并不能修改 切入点的返回值
        //但如果 result 引用类型,result 和 切入点返回值,都指向的是相同的对象
        //则可以通过如 result.setName() result.name="xxxx" 改变对象的成员值
    }



    //在切入点执行出现异常时,相当于 catch 中

    public void afterThrowing(Throwable ex){
        System.out.println("Aspect afterThrowing "+ex.getMessage());
    }


    public void after(){
        System.out.println("Aspect after ");
    }

}

相关文章

网友评论

      本文标题:spring-6-配置文件中声明切面

      本文链接:https://www.haomeiwen.com/subject/emvowhtx.html