代码拉取完成,页面将自动刷新
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
底层原理
两种动态代理:
有接口 使用JDK动态代理
无接口,使用CGlib
术语
连接点:一个类中哪些方法可以被增强,这些方法成为连接点
切入点:实际上被真正增强的方法,成为切入点
通知:
切面:是动作,把通知应用到切入点的过程
切入点表达式
作用:知道对哪个类的哪个方法进行增强
]]语法结构(基于AspectJ
):
execution(【权限修饰符】,【返回类型】,【类全路径】,(【参数列表】))
举例:
通知的配置
(1)在spring配置文件中,开启注解扫描 (2)使用注解创建User和UserProxy对象 (3)在增强类上面添加注解@Aspect (4)在spring配置文件中开启生成代理对象
通知的种类
***/相同切入点抽取***
@Pointcut(value = "execution(* com.atguigu.spring5.aopanno.User.add(..))")
public void pointdemo() { }
**//前置通知**
//@Before注解表示作为前置通知
@Before(value = "pointdemo()")//相同切入点抽取使用!
**//后置通知(返回通知)**
@AfterReturning(value = "execution(* com.atguigu.spring5.aopanno.User.add(..))")
**//最终通知**
@After(value = "execution(* com.atguigu.spring5.aopanno.User.add(..))")
**//异常通知**
@AfterThrowing(value = "execution(* com.atguigu.spring5.aopanno.User.add(..))")
**//环绕通知**
@Around(value = "execution(* com.atguigu.spring5.aopanno.User.add(..))")
public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { System.out.println("环绕之前.........");
*//被增强的方法执行*
proceedingJoinPoint.proceed(); System.out.println("环绕之后........."); }
通知类的优先级
在类的前面加上@order(0)
,括号里的数字越小,表示优先级越高,可以填写0,1,2,3,4,5...
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。