第十九章 基于注解的AOP编程
1.基于注解的AOP编程步骤#
-
原始对象
-
额外功能
-
切入点
-
组装切面
将2 3 4步放在切面类中: 定义切面类: @Aspect 定义额外功能: @Around 原始方法的运行: ProceedingJoinPoint.proceed() 定义切入点: @Around(* login(..))
package com.dong.aspect; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; @Aspect public class MyAspect { @Around("execution(* login(..))") public Object around(ProceedingJoinPoint point) throws Throwable { System.out.println("----Aspect log--------"); Object ret = point.proceed(); return ret; } }
<!--原始对象--> <bean id="userService" class="com.dong.aspect.UserServiceImpl"/> <!-- 切面 1.额外功能 2.切入点 3.组装切面 --> <bean id="around" class="com.dong.aspect.MyAspect"/> <!--告知Spring基于注解进行AOP编程--> <aop:aspectj-autoproxy/>
2.细节#
-
切入点复用
//在切面类中定义一个函数,加上注解@Pointcut 将切入点函数提取出来,利于切入点的复用 @Aspect public class MyAspect { @Pointcut("execution(* login(..))") public void myPointcut() { } @Around(value = "myPointcut()") public Object around(ProceedingJoinPoint point) throws Throwable { System.out.println("----Aspect log--------"); Object ret = point.proceed(); return ret; } public Object around2(ProceedingJoinPoint point) throws Throwable { System.out.println("----new Aspect log------"); Object ret = point.proceed(); return ret; } }
-
动态代理的创建方式
AOP的底层实现 动态代理的两种创建方式 1. JDK 2. CGlib 默认情况下,AOP编程,底层应用JDK动态代理创建方式 如果切换CGlib 1. 基于注解的AOP开发 <aop:aspectj-autoproxy proxy-target-class="true"/> false是默认情况,使用JDK创建代理对象 2. 传统的AOP开发 <aop:config proxy-target-class="true">
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现