[quote]
这就是我的困惑所在。我们都知道,可以用无状态的 Singleton 来封装一些领域服务。比如说,UserService,就可以是一个 Singleton class。在实际使用时,可以用 IoC 容器的依赖注入方法得到它的一个(全 JVM 唯一的)Singleton 实例,然后再调用它里面的方法,比如说:
[/quote]
Singleton 并不是这样的吧 他只是在 servletcontext里面保存了这么一份 beans
每个request过来的时候,使用的是threadlocal
threadlocal 可以说是“拷贝”了 servletcontext里面的beans
可以说是一个副本
这样可以保证多个request使用的beans互相不影响(具体可以理解一下threadlocal )
threadlocal 的实现本身就类似 对象池 ,不过这个东西是语言支持的,而不是自己来实现的。
你说的synchronize 在一般bean上都不会起作用,原理也是这样 用的根本不是同一个对象(static得注意),除非在同一个request中存在多次调用产生 synchronize 现象。
[quote](全 JVM 唯一的)Singleton 实例[/quote] 是否你的理解出偏差了呢?
这就是我的困惑所在。我们都知道,可以用无状态的 Singleton 来封装一些领域服务。比如说,UserService,就可以是一个 Singleton class。在实际使用时,可以用 IoC 容器的依赖注入方法得到它的一个(全 JVM 唯一的)Singleton 实例,然后再调用它里面的方法,比如说:
[/quote]
Singleton 并不是这样的吧 他只是在 servletcontext里面保存了这么一份 beans
每个request过来的时候,使用的是threadlocal
threadlocal 可以说是“拷贝”了 servletcontext里面的beans
可以说是一个副本
这样可以保证多个request使用的beans互相不影响(具体可以理解一下threadlocal )
threadlocal 的实现本身就类似 对象池 ,不过这个东西是语言支持的,而不是自己来实现的。
你说的synchronize 在一般bean上都不会起作用,原理也是这样 用的根本不是同一个对象(static得注意),除非在同一个request中存在多次调用产生 synchronize 现象。
[quote](全 JVM 唯一的)Singleton 实例[/quote] 是否你的理解出偏差了呢?