Мне интересно, смогу ли я сохранить временные данные в атрибуте класса Controller
.
Мое сомнение связано с вызовами параллелизма. Давайте, например, рассмотрим следующий код:
@Controller
public class TestController {
@Autowired
private TestService testService;
@Autowired
private OtherService otherService;
private final HashMap<Integer, Test> testMap = new HashMap<Integer, Test>();
@RequestMapping(value = "test")
@ResponseBody
public List<Test> test() {
List<Test> list = new ArrayList<Test>();
for (final OtherTest otherTest : otherService.getAll()) {
Integer key = otherTest.getId();
final Test t;
if(testMap.containsKey(key)) {
t = testMap.get(key);
} else {
t = testService.getByOtherTestId(key);
}
list.add(t);
}
}
}
Я знаю, что Controllers
- это Beans
, и я знаю, что Beans
- это Singleton
, поэтому:
Что произойдет, если два пользователя вызовут метод test
одновременно?
Каждый из них читает / пишет один и тот же testMap
объект?
Когда объект testMap
потеряет свою область видимости и будет восстановлен?
Спасибо