我写了一个包装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有多线程控制,这样做是不是有什么问题?应该怎么处理比较好?
あなたの理解は正しいです。複数回アセンブルできますが、同じインスタンスが挿入されるため、同時実行を自分で処理する必要があります。
@chiyx が言ったように、2 つの
Controller
は同じインスタンスあなたが書いた
であるかどうかとは関係ありません。EhcacheWrapper
クラス (グローバル変数なし) によれば、与えたコードによれば、競合状態はないため、 メソッド Condition 一方、put
に競合条件がある場合、それは実際にはput
クラスがシングルトンEhcacheWrapper