ホームページ  >  に質問  >  本文

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日前358

全員に返信(2)返信します

  • PHP中文网

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

    あなたの理解は正しいです。複数回アセンブルできますが、同じインスタンスが挿入されるため、同時実行を自分で処理する必要があります。

    返事
    0
  • PHP中文网

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

    1. @chiyx が言ったように、2 つの Controller は同じインスタンス

    2. を呼び出します。
    3. あなたが書いた EhcacheWrapper クラス (グローバル変数なし) によれば、与えたコードによれば、競合状態はないため、<🎜 内で競合がない限り、同時実行性の問題は発生しません。 > メソッド Condition 一方、put に競合条件がある場合、それは実際には put クラスがシングルトン EhcacheWrapper

      であるかどうかとは関係ありません。
    4. 返事
      0
  • キャンセル返事