在 SonarQube 掃描中,它在下面提到的行中顯示了一個主要錯誤。問題說,Singleton 類以不同步的方式寫入欄位。我無法弄清楚,為什么這是一個問題?
@Configuration
@ConfigurationProperties(prefix = "app")
public class UrlConfigs() {
@Autowired
private List<UrlItems> item;
//Getter & Setter
}
@Component
public class UrlItems {
private String url;
private String location;
// Getter
public void setUrl(String url){
this.url = url; // ISSUE: Singleton class writes to a field in an unsynchronized manner
}
public void setLocation(String location) {
this.location = location; // ISSUE: Singleton class writes to a field in an unsynchronized manner
}
}
uj5u.com熱心網友回復:
通常,使用 spring@Component注釋的類是單例,除非指定了不同的范圍(如請求)。那就是這個類的同一個實體將被 spring 注入到這個類自動裝配的每個地方。通過為單例獨立執行緒的內部欄位提供 setter 可以以不同步的方式設定值,從而弄亂類的內部邏輯。
通常,SonarQube 應提供有關如何解決此類警告的附加資訊和提示。
警告的最簡單修復方法是將synchronized關鍵字添加到 setter 方法中。為了使您的代碼至少可能正確,需要將此同步添加到相應成員的所有讀取和寫入用法中。這很可能會導致其他問題——而不是談論性能......
問題應該是
為什么在 @Component 類中需要狀態,并且有辦法避免這種狀態。
要回答這個問題,需要知道這個類及其成員是如何實際使用的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/351982.html
