Maison  >  Questions et réponses  >  le corps du texte

java - @Autowired可以多次装配一个被@Component修饰的类吗?

我写了一个包装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中文网2741 Il y a quelques jours356

répondre à tous(2)je répondrai

  • PHP中文网

    PHP中文网2017-04-18 09:35:24

    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

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 09:35:24

    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. .

    répondre
    0
  • Annulerrépondre