簡體   English   中英

不支持的類型 java.util.concurrent.atomic.AtomicReference

[英]unsupported type java.util.concurrent.atomic.AtomicReference

我正在編寫 OSGI 服務。啟動服務后,我收到以下消息。請建議解決此問題。

@Component (service = Service.class, immediate = true)
public class ServiceImpl implements Service{

@Reference (name = "CounterService", policy = ReferencePolicy.DYNAMIC, cardinality = ReferenceCardinality.MANDATORY,
            bind = "bindCounter", unbind = "unbindCounter", service = CounterService.class)
    public static final AtomicReference<CounterService> myCounterService = new AtomicReference<>();

public void bindCService(CounterService counterService)
{     
    this.cacheService= cacheService;
}

public void unbindService(CounterService cacheService)
{     
    this.cacheService= null;
}

}

啟動服務后我收到了這條消息

-.MESSAGE [com.xxx.xxx.xxx.CounterImpl(29)] 字段 counterService in component class com.xxx.xxx.xxx.CounterImpl has unsupported type java.util.concurrent.atomic.AtomicReference

那么,為什么是 AtomicReference? 您也不需要綁定和解除綁定服務。 你看起來很困惑:-) 你可能想看看視頻OSGi 啟動器

對於動態情況,這是可行的:

@Component(immediate = true)
public class ServiceImpl implements Service {

    @Reference    
    volatile CounterService myCounterService;
    
    @Activate
   void activate() {
    ...
    }
    
}

如果CounterService不是動態的,這是一個非常好的模式:

@Component(immediate = true)
public class ServiceImpl implements Service {

    final CounterService myCounterService;
    
    @Activate
    public ServiceImpl( @Reference  CounterService  c ) {
        this.myCounterService = c;
    }
    
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM