繁体   English   中英

Spring bean 使用@Async 方法,为什么singleton bean 的内部hashcode 与外部不同

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM