为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUWWW 2019-03-13 18:19:21
我写了一个包装Ehcache的类EhcacheWrapper,加入多线程控制,代码如下@servicepublic 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有多线程控制,这样做是不是有什么问题?应该怎么处理比较好?
查看完整描述

2 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

你的理解没错,可以多次装配,但注入的都是同一个实例,需要自己处理并发


查看完整回答
反对 回复 2019-04-22
?
慕容708150

TA贡献1831条经验 获得超4个赞

  1. 如@chiyx说的,两个Controller调用的是同一个实例

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


查看完整回答
反对 回复 2019-04-22
  • 2 回答
  • 0 关注
  • 960 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号