[英]Spring bean with @Async method, why singleton bean‘s inner hashcode is different from outside
我对使用异步方法的 spring bean 中的不同行为感到非常困惑。 我有一个带有 @Async 方法的 Demo Bean,它只打印 this.hashCode()。 和一个由Demo注入的主class。 Demo bean 的范围是 singleton。 但实际上,在Main class中,Demo class的方法test()中的demo.hashcode()不等于this.hashCode()。 为什么? 他们不是同一个实例?
@Component
public class Demo {
@Async
public void test(){
System.out.println(this.hashCode());
}
}
@Component
public class Main implements CommandLineRunner {
@Autowired
Demo demo;
@Override
public void run(String... args) throws Exception {
System.out.println(demo.hashcode());
demo.test();
}
}
在Main
中,您在代理object 上调用hashCode()
方法。 为了支持@Async
Spring 将具体的 object 放置在代理中,以将@Async
逻辑包装在具体的方法调用周围。 因此,您将获得代理的hashCode
值。
调用demo.hashCode()
时,您将返回具体object 的hashCode()
而不再是代理。 因此它们不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.