【八股】AOP

本文介绍了AOP(面向切面编程)的基本概念,如连接点、通知和切入点,通过示例演示如何在Spring框架中实现AOP功能。同时讨论了Spring事务管理中可能出现的问题,如异常处理、检查异常和非public方法对事务的影响及其解决方案。
摘要由CSDN通过智能技术生成

AOP(Aspect Oriented Programming),面向切面编程,他是一种编程范式。
作用: 在不改变原始设计的的基础上对其进行功能增强。

几个基本概念:
连接点:所有的方法
切入点:追加功能的方法
通知:追加的功能
切面:通知和切入点之间的绑定关系

入门demo:
在这里插入图片描述

AOPFunc.java:

@Component
@Aspect
public class AOPFunc {
    @Pointcut("execution (* com.example.demo.Controller.AOPController.sayHello())")
    public void pt(){}

    @After("pt()")
    public void method() {
        System.out.println(System.currentTimeMillis());
    }
}

AOPController.java

@RestController
public class AOPController {

    @RequestMapping("/hello")
    public String sayHello() {
        System.out.println("hello");
        return "hello";
    }
}

访问localhost:运行的端口/hello,结果如下图所示,可以看到AOP已生效:
在这里插入图片描述

Spring事务失效的场景?

情况一:异常捕获处理
原因是,事务通知只有捕捉到了目标抛出的异常,才能进行后续的回滚处理,如果目标自己处理掉异常,那么事务通知就无法知悉。(自己处理了异常没给抛出去
解决方法:在catch块中添加throw new RuntimeException(e)抛出异常 (手动抛出)
在这里插入图片描述

情况二:抛出检查异常
原因:Spring默认只会回滚检查异常(RuntimeExcaption)
解决方法:配置rollbackFor 配置
在这里插入图片描述
情况三:非public方法导致的事务失效
在这里插入图片描述

原因:Spring为方法创建代理,添加事务通知,前提条件都是该方法必须是public的。
解决方案:把方法改成public方法即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值