切面关于线程安全的一个例子
2020-06-02 本文已影响0人
抬头挺胸才算活着
切面如果没有设置Scope的话,默认都是单例的,会被多个线程使用,定义了局部变量start,切面是有状态的,所以是线程不安全的。
可以改为环绕通知,然后将start定义为局部变量。
@Aspect
@Component
public class MyAspect {
// 是否安全?
private long start = 0L;
@Before("execution(* *(..))")
public void before() {
start = System.nanoTime();
}
@After("execution(* *(..))")
public void after() {
long end = System.nanoTime();
System.out.println("cost time:" + (end-start));
}
}