s****y 发帖数: 503 | 1 我写了一个包装Ehcache的类EhcacheWrapper,加入多线程控制,代码如下
@service
public class EhcacheWrapper{
public Element get(String cacheName, String key){......}
public void put(String cacheName, String key, Object value){......}
//多线程控制,代码略
}
我在一个controller中自动装配EhcacheWrapper,比如
public class GetLabelServiceImpl{
@Autowired
private EhcacheWrapper ehcacheWrapper;
//代码略
}
我在其他controller中还能@Autowired EhcacheWrapper吗?
我觉得@Component默认的scope是singleton,只有一个实例。如果在两个类中都@
Autowired EhcacheWrapper,是不是两个类都调用同一个bean呢?EhcacheWrapper有多
线程控制,这样做是不是有什么问题?应该怎么处理比较好? | d*****0 发帖数: 1 | 2 按照我的项目解析,Spring默认Bean的Scope都是Singleton,多个Controller调用的是
同一个Bean,如果多线程里的变量是线程安全的,那么这个Bean就是线程安全的。
举例:实际应用中碰到过如下问题:
页面一次点击,提交两个请求到Controller,对应到Dao中两个方法,Dao类Autowired注
入一个StringBuilder,然后两个方法中各自append SQL字符串,最后toString()时候
得到的字符串是混在一起的。
将Scope改成了prototype后可以解决问题。
写的比较乱,见谅。 | h*********8 发帖数: 404 | 3 that is y i hate all these DI thing...
y dont you simply write your code to do whatever u need? |
|