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 绑定
相关推荐
whltaoin14 分钟前
【 手撕Java源码专栏 】Spirng篇之手撕SpringBean:(包含Bean扫描、注册、实例化、获取)
java·后端·spring·bean生命周期·手撕源码
带刺的坐椅1 小时前
Solon 不依赖 Java EE 是其最有价值的设计!
java·spring·web·solon·javaee
Qiuner2 小时前
Spring Boot 机制二:配置属性绑定 Binder 源码解析(ConfigurationProperties 全链路)
java·spring boot·后端·spring·binder
Y***h18711 小时前
第二章 Spring中的Bean
java·后端·spring
8***293111 小时前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
多多*11 小时前
Java复习 操作系统原理 计算机网络相关 2025年11月23日
java·开发语言·网络·算法·spring·microsoft·maven
K***728412 小时前
开源模型应用落地-工具使用篇-Spring AI-Function Call(八)
人工智能·spring·开源
d***292414 小时前
【spring】Spring事件监听器ApplicationListener的使用与源码分析
java·后端·spring
v***56515 小时前
Spring Cloud Gateway 整合Spring Security
java·后端·spring
f***a34617 小时前
开源模型应用落地-工具使用篇-Spring AI-高阶用法(九)
人工智能·spring·开源