SpringBoot在2.x之后的版本中默认使用CJlib动态代理
如果需要修改为JDK动态代理需要在配置文件中添加:
#在application.properties文件中通过spring.aop.proxy-target-class配置 spring.aop.proxy-target-class=false
-
添加配置类
@Configuration @EnableAspectJAutoProxy public class AppConfig { }
此时已经无法通过@EnableAspectJAutoProxy 注解来修改动态代理的方式了
-
自定义注解 扫描
package com.demo.annotation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface PointCutAnnotation { }
-
添加原始方法
package com.demo.service; import com.hirain.annotation.PointCutAnnotation; import com.hirain.model.User; import org.springframework.stereotype.Service; @Service public class PlayBall { @PointCutAnnotation public void UserPlay() { System.out.print("张三正在"); } }
-
编辑切面
package com.demo.aop; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Aspect @Component public class CommonPointcuts { @After("@annotation(com.demo.annotation.PointCutAnnotation)") public void doAccessCheck() { System.out.println("-----打篮球-----"); } }
编写测试代码输出结果:
张三正在-----打篮球-----