2016-11-25 81 views
0

我有一個代碼片段如下,這將確保一些用戶操作只允許有限的次數。春天比賽條件控制器

1. @Value("${x.y.z.maxRetriesAllowed}") 
2. int maxAllowedRetries; 
3. int retryLimit = --maxAllowedRetries; 

當此去靜態代碼分析(設防),該工具報告,有在線路可能的競爭條件3

有人請建議我們如何才能避免,如果沒有會話對象的幫助。

回答

0

這是怎麼回事?

int retryLimit = this.getRetries(); 

private synchronized int getRetries() 
{ 
    return --this.maxAllowedRetires; 
} 
0

你正在依靠maxAllowedRetries在spring之前初始化retryLimit,當然這是不可能的。基本上,它現在可能是0。因爲該字段在Spring填充值之前初始化,並且在創建對象時retryLimit被初始化。

+0

我認爲一旦請求進入,那麼只有控制器方法中的代碼纔會開始執行。所以到那個時候,spring會讓maxAllowedRetries可供進一步使用。 – kakurala

+0

這些是實例變量,對嗎?所以,當對象被創建時,它們都會被初始化爲零,然後在某個時間後面的spring會設置maxAllowedRetries。無論如何,爲此寫一個測試,你會看到發生了什麼。 –