我写了一个包装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有多线程控制,这样做是不是有什么问题?应该怎么处理比较好?
Votre compréhension est correcte. Elle peut être assemblée plusieurs fois, mais la même instance est injectée, vous devez donc gérer vous-même la concurrence
Comme @chiyx l'a dit, les deux
Controller
appellent la même instanceSelon la classe
EhcacheWrapper
que vous avez écrite (sans variables globales), selon le code que vous avez donné, il n'y a pas de condition de concurrence, donc il n'y aura pas de problèmes de concurrence, sauf s'il y a de la concurrence dans leput
méthode Condition. D'un autre côté, s'il y a une condition de compétition dansput
, cela n'a en fait rien à voir avec le fait que la classeEhcacheWrapper
soit un singleton