写一个AOP的案例项目
时间: 2023-05-24 11:07:10 浏览: 59
假设我们有一个在线商城的网站,需要对用户的购物行为进行监控和统计,我们可以使用AOP来实现这个功能。
首先,我们定义一个注解@Log,用来标记需要被统计的方法:
```java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Log {
}
```
然后我们定义一个切面类,对使用了@Log注解的方法进行统计:
```java
@Aspect
@Component
public class LogAspect {
private static final Logger logger = LoggerFactory.getLogger(LogAspect.class);
// 对被Log注解标记的方法进行拦截
@Around("@annotation(com.example.demo.annotation.Log)")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
// 统计开始时间
long start = System.currentTimeMillis();
// 调用方法
Object result = pjp.proceed();
// 统计结束时间
long end = System.currentTimeMillis();
// 输出日志
logger.info("[{}] 耗时:{}ms", pjp.getSignature().toShortString(), (end - start));
// 返回结果
return result;
}
}
```
最后,在需要被日志统计的方法上添加@Log注解即可:
```java
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Log
@Transactional
public void placeOrder(Order order) {
// 新增订单
orderMapper.insert(order);
}
}
```
这样就能够对placeOrder方法进行统计了。当方法被调用时,会自动被AOP拦截,统计方法执行时间并输出日志。
这个案例只是一个简单的AOP示例,实际应用中,AOP可以用来实现各种横切关注点,例如日志、权限、缓存、事务等。