service层,dao层默认都是单例的。而且我看到资料上说,这种单例实际上是用threadlocal实现的,而这种技术是一个线程复制了一个特殊的副本来实现单例模式,用完再回收,那么是不是可以说,如果service层和dao层有定义一些字段,这些字段会在使用的时候产生多线程安全问题?
2条回答
- 征服.刘华强 2014-03-19 13:41关注
{这种单例实际上是用threadlocal实现的,而这种技术是一个线程复制了一个特殊的副本来实现单例模式,用完再回收} 你这个地方的描述就是错的。
在Spring容器当中管理的对象默认都是单例模式的。
即 BeanFactory.getBean("user") == BeanFactory.getBean("user")
也就是说当有N个线程并发去调用BeanFactory.getBean("user")的时候 拿到的对象是同一个。有个概念需要说清楚 那就是线程安全与不安全与Spring没关系。
就比如说N个线程并发访问 BeanFactory.getBean("user"),拿到的是同一个对象,如果这个对象没有线程不安全的属性 那么多线程使用也是没有问题的。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报