基于Annotation的Spring AOP: @Around

@Around 增强处理是功能比较强大的增强处理,它近似等于Before AfterReturning的总和。@Around既可在执行目标方法之前织入增强动作,也可在执行目标方法之后织入增强动作。@Around甚至可以决定目标方法在什么时候执行,如何执行,更甚者可以完全阻止目标方法的执行。

@Around可以改变执行目标方法的参数值,也可以改变执行目标方法之后的返回值。

@Around功能虽然强大,但通常需要在线程安全的环境下使用。因此,如果使用普通的Before、AfterReturning就能解决的问题,就没有必要使用Around了。如果需要目标方法执行之前和之后共享某种状态数据,则应该考虑使用Around。尤其是需要使用增强处理阻止目标的执行,或需要改变目标方法的返回值时,则只能使用Around增强处理了。

当定义一个Around增强处理方法时,该方法的第一个形参必须是 ProceedingJoinPoint 类型,在增强处理方法体内,调用ProceedingJoinPoint的proceed方法才会执行目标方法------这就是@Around增强处理可以完全控制目标方法执行时机、如何执行的关键;如果程序没有调用ProceedingJoinPoint的proceed方法,则目标方法不会执行。

调用ProceedingJoinPoint的proceed方法时,还可以传入一个Object[ ]对象&#x

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring AOP(面向切面编程)可以用于实现权限控制。在Spring中,您可以使用AOP实现方法级别的权限控制,以确保只有具有指定权限的用户可以访问某些方法。 首先,您需要定义一个切面(Aspect),该切面将包含权限控制的逻辑。您可以使用注解或XML配置来定义切面。 如果您选择使用注解,可以使用`@Aspect`注解来标记切面类,然后使用`@Before`、`@After`或`@Around`等注解来定义我们感兴趣的连接点(Join Point)以及要在这些连接点上执行的切面逻辑。在这种情况下,我们可以使用Spring Security框架提供的注解来实现权限控制,如`@PreAuthorize`和`@PostAuthorize`。 示例代码如下: ```java import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.security.access.prepost.PreAuthorize; @Aspect public class AuthorizationAspect { @Before("@annotation(preAuthorize)") public void checkPermission(PreAuthorize preAuthorize) { // 检查用户权限逻辑 // 如果用户没有满足要求的权限,则抛出异常或执行其他操作 } } ``` 在上述示例中,我们使用`@Before`注解来定义一个前置通知,在方法执行之前检查用户权限。`@annotation(preAuthorize)`表示我们对带有`@PreAuthorize`注解的方法感兴趣。 如果您选择使用XML配置,可以在配置文件中定义一个切面,然后使用`<aop:before>`、`<aop:after>`或`<aop:around>`等元素来配置切面逻辑。 无论您选择哪种方式,都需要确保将切面配置为Spring的bean,并在应用程序上下文中启用AOP。 请注意,权限控制应结合安全框架(如Spring Security)一起使用,以提供更全面的安全性。以上示例仅演示了如何在Spring AOP中实现基本的权限控制。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值