ฉันตั้งใจจะสร้างตัวนับเรียลไทม์ ดังนั้นผู้ใช้รายหนึ่งจึงสามารถเพิ่มค่าตัวนับสำหรับคีย์เฉพาะได้ ในขณะที่อีกอันหนึ่งได้รับค่าการนับที่อัปเดตผ่านการร้องขอ ajax (ไม่ว่าจะเป็นแบบวนซ้ำหรือใช้วิธีการโพลแบบยาว) ฉันจะใช้ตัวควบคุมสปริง ซึ่งจะฉีดคลาสบริการ ฉันสามารถทำอะไรบางอย่างด้านล่าง หรือมีวิธีที่ดีกว่า:
@Service
public MyService{
//instance variable in spring injected service class, not sure if this correct
static final Map<String, Integer> myMap;
public void add(String key){
Integer count = myMap.get(key);
count++;
myMap.put(key, count);
}
//accessed via ajax loop (and controller), if value changes update display
public Integer getCount(String key){
return myMap.get(key)
}
@PostConstruct
public load(){
myMap = new HashMap<String, Integer>(10){{//initialize}};
}
แก้ไข มีคำตอบอยู่บ้างแต่ยังไม่ชัดเจนว่าข้อใดดีที่สุด : ซิงโครไนซ์วิธีการเพิ่ม ? สร้างแผนที่ในคลาสอื่น (ที่เก็บคำอธิบายประกอบ) และฉีดสิ่งนั้น ? อื่น ๆ อีก ?