使用spring boot 实现 aop 做一个程序允许时长的aop
时间: 2024-01-11 20:42:48 浏览: 96
spring的aop实现
1. 首先需要在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
```
2. 创建一个切面类,实现对程序运行时长的监控。
```java
@Aspect
@Component
public class TimeAspect {
ThreadLocal<Long> startTime = new ThreadLocal<>();
@Pointcut("execution(* com.example.demo.service.*.*(..))")
public void pointcut() {}
@Before("pointcut()")
public void before(JoinPoint joinPoint) {
startTime.set(System.currentTimeMillis());
}
@AfterReturning("pointcut()")
public void afterReturning(JoinPoint joinPoint) {
long time = System.currentTimeMillis() - startTime.get();
System.out.println(joinPoint.getSignature() + " executed in " + time + "ms");
}
}
```
3. 上面的切面类中,定义了一个线程局部变量startTime,用于记录程序开始执行的时间。在切点方法执行前,将当前时间保存在startTime中;在切点方法执行完毕后,用当前时间减去startTime,得到程序的执行时长。最后输出执行时长。
4. 在启动类上加上@EnableAspectJAutoProxy注解,开启AOP功能。
```java
@SpringBootApplication
@EnableAspectJAutoProxy
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
```
5. 在需要进行运行时长监控的方法上添加@LogExecutionTime注解。
```java
@Service
public class DemoService {
@LogExecutionTime
public void execute() throws InterruptedException {
Thread.sleep(new Random().nextInt(1000));
}
}
```
6. 最后,执行程序,可以看到输出了程序的运行时长。
```java
@Service
public class DemoService {
@LogExecutionTime
public void execute() throws InterruptedException {
Thread.sleep(new Random().nextInt(1000));
}
}
// 输出:com.example.demo.service.DemoService.execute() executed in 340ms
```
阅读全文