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

@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有多线程控制,这样做是不是有什么问题?应该怎么处理比较好?  


解决:

要不写成线程安全的类。要不在使用的地方new就可以了 


默认scope=singleton单例的,在ioc容器中只实例化一次,如何你想每次都创建一个新的对象可以scope=prototype 每次发送请求时都会创建


 第一个问题,如果你没有加scope,那么spring初始化的的这个类的实例只有一个,无论在其他什么地方注入都是那一个实例。

第二个问题,一般service类作为其他类的成员变量,本身这个变量不涉及到赋值或内容改变,只是调用下实例的方法,方法也一般不涉及到自身成员变量的操作,不会有什么线程安全问题

参考:https://bbs.csdn.net/topics/391987372?locationNum=5&fps=1

架构    Spring
一、SpringBootTest介绍SpringTest与JUnit等其他测试框架结合起来,提供了便捷高效的测试手段。而SpringBootTest是在SpringTest之上的再次封装,增加了切片测试,增强了mo
没有更多推荐了 [去首页]
image
文章
376
原创
293
转载
83
翻译
0
访问量
183397
喜欢
73
粉丝
5
码龄
7年
资源
3

文章目录

加载中...
0
0