java - @Autowired可以多次装配一个被@Component修饰的类吗?
PHP中文网
PHP中文网 2017-04-18 09:33:24
0
2
386

我写了一个包装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有多线程控制,这样做是不是有什么问题?应该怎么处理比较好?

PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(2)
洪涛

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

Ty80
  1. Comme @chiyx l'a dit, les deux Controller appellent la même instance

  2. Selon 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 le put méthode Condition. D'un autre côté, s'il y a une condition de compétition dans put, cela n'a en fait rien à voir avec le fait que la classe EhcacheWrapper soit un singleton

  3. .
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal