自定义注解+AOP

自定义注解与AOP(面向切面编程)的结合常常用于在应用程序中划定切面,以便在特定的方法或类上应用横切关注点。以下是一个简单的示例,演示了如何创建自定义注解,并使用Spring AOP来在被注解的方法上应用通知。

如何创建自定义注解

链接

创建注解

首先,创建一个自定义注解:

java 复制代码
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation {
    String value() default "";
}

这个注解名为 MyCustomAnnotation,它可以标注在方法上,具有一个可选的字符串值。

创建切面

然后,创建一个切面类,定义通知,并使用切入点表达式匹配被 MyCustomAnnotation 注解标注的方法:

java 复制代码
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class MyAspect {

    @Before("@annotation(myCustomAnnotation)")
    public void beforeAdvice(MyCustomAnnotation myCustomAnnotation) {
        String value = myCustomAnnotation.value();
        System.out.println("Before method execution with custom annotation. Value: " + value);
    }
}

这个切面类使用了 @Before 注解,它的参数是一个切入点表达式 @annotation(myCustomAnnotation),表示在被 MyCustomAnnotation 注解标注的方法执行前执行。方法的参数 MyCustomAnnotation myCustomAnnotation 允许你获取到注解上的值。

最后,在你的服务类中使用 MyCustomAnnotation 注解:

java 复制代码
import org.springframework.stereotype.Service;

@Service
public class MyService {

    @MyCustomAnnotation(value = "Custom Value")
    public void myMethod() {
        System.out.println("Executing myMethod");
    }
}

在这个例子中,MyService 类中的 myMethod 方法上标注了 MyCustomAnnotation 注解。当调用这个方法时,切面中的通知会在方法执行前输出相关信息。

这样,你就通过自定义注解和AOP结合的方式,实现了在特定方法上应用通知的需求。

使用切入点

java 复制代码
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class MyAspect {

    // 定义切入点,匹配所有使用 @MyCustomAnnotation 注解的方法
    @Pointcut("@annotation(com.example.demo.MyCustomAnnotation)")
    public void myCustomAnnotationPointcut() {}

    // 在切入点之前执行通知
    @Before("myCustomAnnotationPointcut()")
    public void beforeAdvice() {
        System.out.println("Before method execution with custom annotation");
    }
}
相关推荐
茶本无香6 分钟前
Arthas 实战:线上“看 Map”的四种武器
java·map·arthas·线上定位
霸道流氓气质1 小时前
Spring AI异常处理与重试机制
java·人工智能·spring
郑州光合科技余经理3 小时前
本地生活服务系统:成品模块和定制接口怎么划界
java·前端·人工智能·后端·系统架构·php·ai编程
2603_965148113 小时前
家居百货蓝海:API挖掘高复购率生活小商品
大数据·服务器·人工智能·python·生活
萧瑟余晖3 小时前
Java深入解析篇三十三之密封类与接口(Sealed Classes)详解
java·开发语言
cui_ruicheng7 小时前
LangChain 应用开发(十四):Agent 上下文与记忆机制
服务器·人工智能·python·langchain
论迹复利7 小时前
FreeRTOS 在 RISC-V 上是如何“点火“的 —— 从 main() 到第一个任务的完整链路
java·开发语言·risc-v
张宇Joaquin7 小时前
鲲鹏统一并行加速库KUPL--众核并行能力介绍
java·开发语言·网络
宸津-代码粉碎机8 小时前
AI攻防战升级!基于Spring AI构建Java应用自动免疫安全体系
java·大数据·开发语言·人工智能·python·安全·spring
倔强的石头_8 小时前
连接数失控排查:从数据库会话、应用线程池到连接池泄漏
数据库