@AspectJ语法基础之切点表达式函数和函数入参时使用通配符

来源:互联网 发布:域名ip地址查询 编辑:程序博客网 时间:2024/06/16 16:59

1.切点表达式函数

切点表达式函数大致分成四种类型:

a .方法切点函数:通过描述目标类方法的信息定义连接点,如:excution()(方法匹配模式串,如excution(*greetTo(..))代表所有目标类中的greetTo方法)和@annotation()(方法注解类名,如@annotation(com.lilei.test.NeedTest)表示任何标注了@NeedTest注解的目标类方法)函数

b. 方法入参切点函数:通过描述目标类方法的入参信息定义连接点,如:args(Object obj)表示所有且仅有一个入参对象为Object类型的参数,@args(com.lilei.test.NeedTest)表示任何这样的一个目标类中的方法的参数有一个或多个被@NeedTest注解

c. 目标类切点函数:通过描述目标类类型的信息来定义连接点,如within(com.lilei.test.*)表示test包中所有的连接点都匹配切点,target(com.lilei.test.NeedTest) 表示NeedTest以及实现类的所有连接点都匹配切点,@within()和@target()和上两个的用法类似。

d. 代理类切点函数:通过描述目标代理类的信息来定义连接点,如:this()

2.在函数入参时使用通配符

a. *代表匹配任何字符,但是只能匹配上下文中的一个元素
b. ..代表匹配任何字符,可以匹配上下文中多个元素,但是表示类的时候必须和*联合使用,在表示入参的时候则单独使用
c.+表示按照类型匹配指定类的所有类,必须跟在类名后面,如com.lilei.test.NeedTest+则表示继承或扩展指定类的所有类,同时还包括指定类本身

package com.lilei.test.aspectjTest;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;/** * 使用注解标示切面 * @author lilei * Created by Administrator on 2017/10/19. */@Aspectpublic class PreGreetingAspect {    @Before("execution(* greetTo(..))")//只要是目标类中所有的greetTo打头的方法都拦截    public void beforeGreeting(){        System.out.println("How are you");    }}
阅读全文
0 0
原创粉丝点击