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 3结合MyBatis-Flex的技术实践与优化【无标题】
人工智能·爬虫·spring
阿里云云原生2 小时前
Spring AI Alibaba 1.0 GA 正式发布,Java 智能体开发进入新时代
spring
axinawang5 小时前
通过RedisCacheManager自定义缓存序列化(适用通过注解缓存数据)
前端·spring·bootstrap
forestsea8 小时前
Spring 路由匹配机制详解:时间复杂度从 O(n) 降至 O(log n)
java·后端·spring·路由匹配
小白的代码日记8 小时前
Spring MVC 入门案例:从代码到原理的深度剖析
java·spring·mvc
chanalbert8 小时前
Spring上下文模块设计
java·spring
组合缺一9 小时前
Java Solon v3.3.2 发布(可替换,美国博通公司的 Spring 方案)
java·spring·ai·solon·solon-flow
shangjg39 小时前
Eureka 服务注册与发现原理和使用
java·spring·spring cloud·eureka
加什么瓦21 小时前
SpringCloud——微服务
spring·spring cloud·微服务
fictionist1 天前
动态 Web 开发技术入门篇
java·服务器·开发语言·笔记·学习·mysql·spring