Open turingking opened 4 years ago
我把断点打在 AppJoint.class 的101行,发现会执行多次。
public BinaryKeyMap<Class, String, Object> getRouterInstanceMap() {
if (softRouterInstanceMap.get() == null) {
softRouterInstanceMap = new SoftReference<>(new BinaryKeyMap<>()); //这里在初始化的时候会走三次
}
return softRouterInstanceMap.get();
}
初步判断是 SoftReference 被回收的问题 这导致我A页面使用的是一个ServiceImpl对象,B页面使用的是一个新的ServiceImpl对象。
我也发现了这个问题,就是软引用导致的,系统内存不足会导致软引用被内存回收掉。可能作者没想用到单例模式。但是如果按照单例模式使用就会出现生命周期问题。
使用@ServiceProvider 注解的类有时候会被实例化多次,导致不同的时刻调用 AppJoint.service(A.class) 方法会返回不同的对象。