Spring单例模式线程安全问题
spring中默认bean是单例模式,对于大部分无状态的情况下是没问题的,但是如果有成员变量会出现线程安全问题,解决方案是设置scope为 prototype,同时proxyMode设置成target_class或者interfaces。但是会遇到另外的问题,看下下面代码:
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class TestScope {
String name;
public void call() {
this.name = "123";
}
public void call2() {
System.out.println(this.name);
}
}
如果在外面分别调用call(),call2()的话会输出什么?以及为什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
看你怎么调了
调用场景:
这里其实输入的还是null。 原因是因为testScope是使用动态代理方式调用,两次的testScope其实是生成了两个不同的对象,这样第一个testScope设置的变量值在第二个testScope对象里是拿不到的,所以输入null