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 绑定
相关推荐
我的运维人生1 小时前
Spring Cloud微服务:构建现代应用的新基石
spring·spring cloud·微服务·运维开发·技术共享
A_aspectJ7 小时前
‌Spring MVC的主要组件有哪些?
java·spring·mvc
Slow菜鸟8 小时前
Spring 设计模式之装饰器模式
spring·设计模式·装饰器模式
鹿屿二向箔9 小时前
【毕业论文+源码】基于SSM(Spring + Spring MVC + MyBatis)的房屋租赁系统
spring·mvc·mybatis
A_aspectJ10 小时前
Spring 框架中都用到了哪些设计模式?
spring·设计模式·1024程序员节
AIGC绘画10 小时前
Spring微服务概述之spring cloud alibaba服务调用实践
java·spring·微服务
带刺的坐椅11 小时前
Spring SPI、Solon SPI 有点儿像(Maven 与 Gradle)
java·spring·solon·spi
武昌库里写JAVA12 小时前
【MySql】-0.1、Unbunt20.04二进制方式安装Mysql5.7和8.0
spring boot·spring·毕业设计·layui·课程设计
鱼跃鹰飞16 小时前
大厂面试真题-简单描述一下SpringBoot的启动过程
java·spring boot·后端·spring·面试
尘浮生18 小时前
Java项目实战II基于Spring Boot的小型诊疗预约平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·spring·课程设计