JavaWeb——AOP进阶(4/5)-切入点表达式-annotation(@annotation 表达式的使用步骤、自定义注解、使用注解表达式定义切入点、表达式验证与测试)

目录

一、基于注解的切入点表达式 @annotation

1、背景回顾

1.1 问题提出

1.2 解决思路

二、@annotation 表达式的使用步骤

1、自定义注解

1.1 创建注解

1.2 注解配置

2、在目标方法上添加注解

3、使用注解表达式定义切入点

三、表达式验证与测试

1、运行测试方法

2、验证匹配效果

2.1 匹配控制灵活

四、总结与对比

1、两种表达式对比

2、使用建议

2.1 execution 适用场景

2.2 @annotation 适用场景



一、基于注解的切入点表达式 @annotation

1、背景回顾

1.1 问题提出

在使用 execution 表达式匹配多个无规律的方法时,组合多个表达式不够方便和灵活。

1.2 解决思路

可使用另一种切入点表达式 —— @annotation 表达式,基于注解来进行方法匹配,从而简化表达式编写。


二、@annotation 表达式的使用步骤

1、自定义注解

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyLog {
}

1.1 创建注解

在 AOPC 包中自定义注解,例如:

public @interface MyLog {}

1.2 注解配置

  • @Retention(RetentionPolicy.RUNTIME):指定注解在运行时生效。

  • @Target(ElementType.METHOD):指定注解只能用于方法上。

注解本身不包含属性,仅作为标识使用。

2、在目标方法上添加注解

在需要被匹配的方法上加上该注解:

@MyLog
public void list() {}

@MyLog
public void delete() {}

3、使用注解表达式定义切入点

在切面中使用注解型切入点表达式:

@Slf4j
@Component
@Aspect

public class MyAspect3 {
    @Pointcut("@annotation(com.qiyi.aop.MyLog)")
    private void pt(){}
    
    
    @Before("pt()")
    public void before() {
        log.info("before... MyLog");
    }
}

三、表达式验证与测试

1、运行测试方法

运行加了 @MyLog 注解的方法,观察通知是否执行。

2、验证匹配效果

  • 添加注解的方法:通知会执行

  • 移除注解的方法:通知不会执行

2.1 匹配控制灵活

只需在方法上添加或移除注解即可控制是否匹配该方法,灵活简洁。


四、总结与对比

1、两种表达式对比

表达式类型表达式示例特点
executionexecution(* *..*Service.*(..))通过方法签名匹配,常规、广泛使用
@annotation@annotation(com.example.MyLog)通过注解标记方法,灵活、精确

2、使用建议

2.1 execution 适用场景

  • 方法规则统一,便于通过签名匹配

  • 使用频率最高的一种方式

2.2 @annotation 适用场景

  • 方法名不规律或需求特殊时

  • execution 难以描述时的补充方案

注解表达式需多定义一个注解,但可获得更高的灵活性和控制力。


END


学习自:黑马程序员——JavaWeb课程

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值