springaop around案例
时间: 2023-11-03 11:15:51 浏览: 98
下面是一个使用Spring AOP around通知的示例:
假设我们有一个服务类 `UserService`,其中有一个方法 `getUserById`,通过用户ID从数据库中获取用户信息。我们想要在方法执行前后添加日志记录,可以使用Spring AOP的around通知来实现。
首先,我们需要创建一个切面类 `LogAspect`,并在其中定义around通知方法 `logAround`:
```java
@Aspect
@Component
public class LogAspect {
@Around("execution(* com.example.UserService.getUserById(..))")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
// 记录方法执行之前的日志
System.out.println("Before getUserById method execution");
// 执行目标方法
Object result = joinPoint.proceed();
// 记录方法执行之后的日志
System.out.println("After getUserById method execution");
return result;
}
}
```
上述代码中,我们使用了`@Aspect`注解将类声明为切面类,并使用`@Around`注解定义了around通知方法`logAround`。在`@Around`注解中,我们指定了需要拦截的方法为`com.example.UserService.getUserById`,并使用`ProceedingJoinPoint`参数来执行目标方法。
在`logAround`方法中,我们先记录了方法执行之前的日志,然后通过`joinPoint.proceed()`执行了目标方法`getUserById`,最后记录了方法执行之后的日志,并返回了方法执行的结果。
接下来,我们需要在Spring配置文件中添加以下配置:
```xml
<aop:aspectj-autoproxy />
<bean id="logAspect" class="com.example.LogAspect" />
```
上述配置中,`<aop:aspectj-autoproxy />`用于启用AspectJ自动代理,并通过`<bean>`标签定义了切面类`LogAspect`的bean。
最后,我们可以在`UserService`中调用`getUserById`方法并观察控制台输出的日志:
```java
@Service
public class UserService {
public User getUserById(Long userId) {
// 根据用户ID从数据库中获取用户信息
User user = userDao.getUserById(userId);
return user;
}
}
```
当我们调用`getUserById`方法时,控制台会输出以下日志:
```
Before getUserById method execution
After getUserById method execution
```
这说明我们成功地在方法执行前后添加了日志记录。
阅读全文