spring核心AOP

AOP入门
AOP导入-问题
解决共性代码的抽取问题,相同的代码抽取完成之后使用AOP动态增强。
AOP相关概念【总】
通知
被增强的逻辑,或者后期要加入的代码。
目标对象
被增强的对象
代理对象
增强后的对象
连接点
目标对象中的所有方法
切入点
目标对象中被增强的方法
切面
通知+切点
AOP快速入门-解决方法耗时问题

AOP快速入门-执行流程【总结】
如果进行了AOP配置,那么容器中存放的是代理对象,注入的也是代理对象

导入Aspect依赖

<dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
        </dependency>

AOP进阶
切入点表达式
execution
使用切点表达式匹配要增强的方法。
@Around(“execution(* com.itheima.service.impl.PersonServiceImpl.*(…))”)
@annotation
根据指定注解匹配要增强的方法
【第一步】自定义注解
【第二步】在要增强的类或者方法上使用注解
【第三步】在通知方法注解中使用@annotation注解指定要匹配的注解全类名
@Around(“@annotation(com.itheima.anno.MyAnno)”)
抽取公共切入点表达式

@Pointcut("execution(* com..impl.PersonServiceImpl.save(..))")public void save(){}

通知类型
@Around:环绕通知,一种手动调用目标对象方法的通知方法
@Before:前置通知,在目标方法执行之前执行
@AfterReturning :后置通知,在目标方法执行之后且没有异常时执行
@AfterThrowing :异常通知,在目标方法执行之后且出现异常时执行
@After :最终通知,在目标方法执行之后无论是否出现异常都执行
连接点
前置/后置/异常/最终通知方法中使用JoinPoint对象获取连接点信息。
@Before(“execution(* com.itheima.service.impl.PersonServiceImpl.*(…))”)
public void before(JoinPoint jp){…}
通知顺序
默认切面类类名的字符串先后顺序执行,但是可以通过@Order(数值)定义优先级。值越小,优先级越高。
扩展拔高
代理方式
jdk动态代理
代理对象和目标对象实现相同的接口
cglib动态代理(默认)
代理对象是目标对象的子类对象
通知失效
业务层方法中调用了本类的方法就会通知实现,原因是本类中方法调用不是使用代理对象调用,而是使用目标对象(this)调用。
解决:在类中注入代理对象,在配置文件中运行set方式循环依赖
AOP练习-统计每个方法的执行次数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值