spring Aop 中 Advice, advisor和Advised关系

spring Aop 中 Advice,PointCut, Advisor和Advised关系

  • Advice: 增强, 如BeforeAdvice, AfterAdvice...
  • Advisor表示增强定义,由 Advice和PointCut组成
  • Advised 管理 Advisor

使用 spring Aop 定义增强

使用 spring Aop 定义增强,而不是用 AspectJ

java 复制代码
@Slf4j
public class LogAdvice implements MethodBeforeAdvice {

    @Override
    public void before(Method method, Object[] args, Object target) throws Throwable {
        log.info("before method: {}", method.getName());
    }
}

@Configuration
public class SpringAopConfig {

    @Bean
    public LogAdvice logAdvice() {
        return new LogAdvice();
    }

    @Bean
    public Advisor logAdvisor() {
        NameMatchMethodPointcut nameMatchMethodPointcut = new NameMatchMethodPointcut();
        nameMatchMethodPointcut.addMethodName("ping");
        return new DefaultPointcutAdvisor(nameMatchMethodPointcut, logAdvice());
    }
}

结果:

bash 复制代码
INFO 104836 --- [nio-8080-exec-3] com.proxy.sample.LogAdvice   : before method: ping

使用 AspectJ 实现AOP

java 复制代码
@Component
@Aspect
@Slf4j
public class LogAspect {

    @Pointcut("execution(* com.controller.HealthController.*(..))")
    public void pc() {
    }

    @Before("pc()")
    public void log(JoinPoint joinPoint) {
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        log.info("before method: {}", signature.getName());
    }
}

结果:

bash 复制代码
INFO 96524 --- [nio-8080-exec-1] com.proxy.sample.LogAspect   : before method: ping

AspectJ 和 Spring Aop区别

  • 都可以实现AOP 增强
  • AspectJ是在编译期
  • Spring Aop则是运行时,动态创建,性能要稍微差点
  • AspectJ 使用范围更广,不依赖spring, 而spring Aop则与spring 绑定
相关推荐
砍材农夫2 小时前
物联网实战:Spring Boot MQTT | MQTT 设备模拟器演示(附源码)
java·spring boot·后端·物联网·spring·netty
EAIReport2 小时前
Spring AI 详解:Java 开发者快速落地 AI 应用
java·人工智能·spring
爱吃牛肉的大老虎4 小时前
Spring中用到的设计模式
java·spring·设计模式
Stick_ZYZ4 小时前
从“能调用工具”到“能稳定执行任务”:Agent 工程化的下一步
java·人工智能·后端·spring·ai
東雪木4 小时前
泛型、反射、注解(Spring 框架核心底层)专属复习笔记
java·windows·笔记·学习·spring
phltxy5 小时前
Spring AI 应用开发
java·人工智能·spring
J2虾虾6 小时前
Spring AI Alibaba - Structured Output 结构化输出
人工智能·python·spring
coder Ethan7 小时前
Spring AI 入门:(3)快速搭建一个简单的问答助手
java·人工智能·spring
霸道流氓气质7 小时前
Spring AI Alibaba + Ollama+Embedding向量化项目完整指南
人工智能·spring·embedding
梅孔立8 小时前
解决Nginx缓存不写入响应体问题:浏览器强制不缓存配置教程
java·开发语言·nginx·spring