现象

仅限于初次接触Spring AOP的患者😂

SpringBoot项目在使用@Aspect注解配置切面类后,实际运行的时候并不会执行相关切面类中的代码。

解决

Application类前添加@EnableAspectJAutoProxy注解。

如果不是使用SpringBoot的Spring MVC项目,需要在对应位置添加<aop:aspectj-autoproxy proxy-target-class="true" />配置。

原因

@EnableAspectJAutoProxy其实就是控制AOP的“开关”,不配置这个当然没用啦 ╮(╯▽╰)╭

package org.springframework.context.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({AspectJAutoProxyRegistrar.class})
public @interface EnableAspectJAutoProxy {
    boolean proxyTargetClass() default false;

    boolean exposeProxy() default false;
}

@EnableAspectJAutoProxy用于启用自动代理。有两个参数:

  1. boolean proxyTargetClass
    用于配置代理的具体实现方式。
    proxyTargetClass 代理实现方式
    false(默认值) 使用java接口进行代理
    true 使用cglib进行代理
  2. boolean exposeProxy
    配置内部调用的暴露情况,即是否对内部调用也进行代理,默认为false(不代理内部调用)。

相关学习

这个博客介绍@EnableAspectJAutoProxy注解挺详细:
spring @EnableAspectJAutoProxy背后的那些事(spring AOP源码赏析)