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 绑定
相关推荐
冷yan~1 小时前
Spring AI与智能代理模式的深度解析
java·spring·ai·ai编程
唐僧洗头爱飘柔95272 小时前
【SpringCloud(1)】初识微服务架构:创建一个简单的微服务;java与Spring与微服务;初入RestTemplate
java·spring·spring cloud·微服务·架构·resttemplate·java微服务技术栈
A阳俊yi4 小时前
Spring——事件机制
java·后端·spring
Fency咖啡4 小时前
Spring进阶 - SpringMVC实现原理(二)DispatcherServlet处理请求的过程
java·后端·spring·mvc
元亓亓亓6 小时前
SSM--day2--Spring(二)--核心容器&注解开发&Spring整合
java·后端·spring
程序定小飞7 小时前
基于springboot的蜗牛兼职网的设计与实现
java·数据库·vue.js·spring boot·后端·spring
iナナ20 小时前
Spring Web MVC入门
java·前端·网络·后端·spring·mvc
tuokuac1 天前
springMVC中/*与/**匹配的区别
java·spring
珹洺1 天前
Java-Spring 入门指南(十七)SpringMVC--Apipostl与RestFul实战测试
java·spring·restful
羊锦磊1 天前
[ Spring 框架 ] 数据访问和事务管理
java·后端·spring