ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

切入点表达式回顾

2022-02-09 01:04:07  阅读:149  来源: 互联网

标签:回顾 .. com 切入点 任意 village 方法 public 表达式


切入点表达式:

完整写法:execution(方法的修饰符 方法的返回值 类的全类名.方法名(参数))
    支持通配符的写法:
    *   : 标识任意字符串
    ..  : 任意重复次数
    1. 方法的修饰符可以省略:
    2. 返回值可以使用*号代替:标识任意返回值类型
    3. 包名可以使用*号代替,代表任意包(一层包使用一个*)
    4. 使用..配置包名,标识此包以及此包下的所有子包
    5. 类名可以使用*号代替,标识任意类
    6. 方法名可以使用*号代替,表示任意方法
    7. 可以使用..配置参数,任意参数

切入点表达式代码
导入第三方jar包
	<!-- 切入点表达式 -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.6.8</version>
    </dependency>
切入点表达式:
    作用: 找到需要增强的方法
    格式: 修饰符 返回值 包名.类名.方法名称(参数列表)
        public void com.village.service.impl.AccountServiceImpl.save())
    规则:
        *   : 标识任意字符串
        ..  : 任意重复次数
            public void com.village.service.impl.AccountServiceImpl.save(..)
        1. 方法的修饰符可以省略:
            void com.village.service.impl.AccountServiceImpl.save(..)
        2. 返回值可以使用*号代替:标识任意返回值类型
            * com.village.service.impl.AccountServiceImpl.save(..)
        3. 包名可以使用*号代替,代表任意包(一层包使用一个*)
            * com.village.*.*.AccountServiceImpl.save(..)
        4. 使用..配置包名,标识此包以及此包下的所有子包
            * com..AccountServiceImpl.save(..)  不建议
        5. 类名可以使用*号代替,标识任意类
            * com.village.*.*.*.save(..)
        6. 方法名可以使用*号代替,表示任意方法
            * com.village.*.*.*.*(..)
            * *.*.*.*.*(..)   不要
        7. 可以使用..配置参数,任意参数

        最终建议格式:
            * com.village.service.*.AccountServiceImpl.*(..)

 切面类代码

/**
 * 此类为通知类:
 *      在该类中定义了,各种通知需要调用的相关方法
 */
@Component("myAspect")
@Aspect // 声明此类为切面类(通知类)
public class MyAspect {
    /**
     * 定义一个无参无返回值的方法
     * 在方法上添加@Pointcut注解,用于定义切入点表达式
     * 引用时,只需要使用当前方法的名称()   pt()
     */
    @Pointcut("execution(* com.village.service.impl.*.*(..))")
    public void pt(){}
    /**
     * 前置通知调用的方法
     */
    //@Before("pt()")
    public void before(){
        System.out.println("前置通知...111111111111");
    }

    /**
     * 后置通知调用的方法
     */
    //@AfterReturning("pt()")
    public void afterReturning(){
        System.out.println("后置通知...2222222222222");
    }

    /**
     * 异常通知调用的方法
     */
    //@AfterThrowing("pt()")
    public void afterThrowing(){
        System.out.println("异常通知...33333333333333");
    }

    /**
     * 最终通知调用的方法
     */
    //@After("pt()")
    public void after(){
        System.out.println("最终通知...44444444444444");
    }

    /**
     * 环绕通知调用的方法
     */
    @Around("pt()")
    public Object around(ProceedingJoinPoint joinPoint){
        Object result = null;
        try {
            System.out.println("前置通知...");
            // 相当于 方法字节码对象.invoke();
            // 让原方法执行
            result = joinPoint.proceed();
            System.out.println("后置通知...");
        } catch (Throwable throwable) {
            throwable.printStackTrace();
            System.out.println("异常通知...");
        }finally {
            System.out.println("最终通知...44444444444444");
        }
        return result;
    }
}

 

标签:回顾,..,com,切入点,任意,village,方法,public,表达式
来源: https://www.cnblogs.com/SmallVillageChief/p/15873442.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有