关于Springboot注解声明事务切面优先级的小测试

我们都知道,SpringBoot数据库事务是基于切面实现的,我们经常在自定义切面实现一些数据库操作,这些操作受不受Spring事务管理勒,怎么控制我们自己切面和事务切面的优先级关系,我做了些测试。

前提:事务和切面的实现都采取注解实现,这也是我们当前最常用的。

就不贴测试过程了,有点弱。测试结论如下:

  • @Order用于定义切面类优先级,order的value为Int,其值越低,越先执行,越后出来。
  • @Order默认值为2147483647,不加@Order的切面其值可以理解为也为2147483647(int类型最大值)。
  • 事务切面的优先级可以理解为就是2147483647,但是事务的优先级在order为2147483647中优先级最高的。

结论:要想自定义切面在事务里运行,不加@Order就好了,如果想在外面执行,加上order注解并随意指定一个值只要小于2147483647就好了。

转载于:https://my.oschina.net/u/4101481/blog/3101037

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中定义一个切面,你可以按照以下步骤进行操作: 1. 创建一个Java类,并使用`@Aspect`注解标记该类为切面类。 2. 在切面类中,定义切入点(Pointcut),用于确定哪些方法需要被拦截。你可以使用`@Pointcut`注解来定义切入点表达式,例如`@Pointcut("execution(* com.example.*.*(..))")`表示拦截com.example包下的所有方法。 3. 在切面类中,编写通知(Advice)方法,用于定义具体的拦截逻辑。通知可以分为前置通知(Before),后置通知(After),返回通知(AfterReturning),异常通知(AfterThrowing)和环绕通知(Around)等类型。 4. 使用`@Before`、`@After`、`@AfterReturning`、`@AfterThrowing`或`@Around`等注解标记对应的通知方法。这些注解表示在切入点的不同位置执行相应的逻辑。 5. 在Spring Boot的配置类中,使用`@EnableAspectJAutoProxy`注解开启自动代理功能,以便让切面生效。 以下是一个简单的示例: ```java import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; @Aspect @Component public class MyAspect { @Pointcut("execution(* com.example.*.*(..))") public void myPointcut() { } @Before("myPointcut()") public void beforeAdvice() { System.out.println("Before method execution"); } @After("myPointcut()") public void afterAdvice() { System.out.println("After method execution"); } } ``` 在上述示例中,切面类`MyAspect`使用`@Aspect`和`@Component`注解进行标记。`myPointcut()`方法定义了一个切入点,表示拦截com.example包下的所有方法。`beforeAdvice()`方法使用`@Before`注解标记,表示在拦截的方法执行前执行逻辑。`afterAdvice()`方法使用`@After`注解标记,表示在拦截的方法执行后执行逻辑。 最后,在Spring Boot的配置类中添加`@EnableAspectJAutoProxy`注解,启用自动代理功能: ```java import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; @Configuration @EnableAspectJAutoProxy public class AppConfig { } ``` 通过以上步骤,你就成功地在Spring Boot应用中定义了一个切面。当满足定义的切入点条件时,切面中的通知方法将被触发执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值