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

我写了一个包装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讲师

全部回覆(2)
洪涛

你的理解沒錯,可以多次裝配,但注入的都是同一個實例,需要自己處理並發

Ty80
  1. 如@chiyx說的,兩個Controller調用的是同一個實例

  2. 按照你寫的EhcacheWrapper类(没有全局变量)所以按照你给出的代码来看,没有形成竞争条件,所以不会有什么并发问题,除非put方法里面有竞争条件.从另外一方面来说,如果put里面有竞争条件,那么其实和EhcacheWrapper類是否是單例沒關

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板