>  Q&A  >  본문

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일 전359

모든 응답(2)나는 대답할 것이다

  • PHP中文网

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

    이해하신 내용이 맞습니다. 여러 번 조립할 수 있지만 동일한 인스턴스가 주입되므로 동시성을 직접 처리해야 합니다.

    회신하다
    0
  • PHP中文网

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

    1. @chiyx가 말했듯이 두 Controller는 동일한 인스턴스

    2. 를 호출합니다.
    3. 당신이 작성한 EhcacheWrapper 클래스에 따르면(전역 변수 없이), 당신이 준 코드에 따르면 경쟁 조건이 없으므로 <🎜에서 경쟁이 없는 한 동시성 문제는 없을 것입니다. > 메소드 조건 반면 put에 경쟁 조건이 있는 경우 put 클래스가 싱글톤 EhcacheWrapper

      인지 여부와는 실제로 아무런 관련이 없습니다.
    4. 회신하다
      0
  • 취소회신하다