У меня есть некоторые серьезные сомнения относительно зависимостей бобов в боковом свете из-за отсутствия знаний о весне.Spring MVC Scope Bean Dependencies and Race Conditions
Я прочитал справочное руководство в разделе 3.5.4.5. Скованные бобы в качестве зависимостей и успешно выполнили пример.
Однако, прежде чем идти дальше, я хотел поделиться своими проблемами.
Позвольте мне поделиться случай использования и мелкие детали реализации
Для каждого запроса пользователя, я хотел бы создать город для каждого пользователя.
@Configuration
public class CityFactory{
@Bean(name = {"currentCity" , "loggedInCity"})
@Scope(value = WebApplicationContext.SCOPE_REQUEST,proxyMode = ScopedProxyMode.TARGET_CLASS)
@Autowired
public CityBean getCityBean(HttpServletRequest request) {
return CityUtil.findCityWithHostName(request.getServerName());
}
Для каждого запроса я хочу, чтобы ввести этот город в одноэлементную области действия контроллера, который по умолчанию возможности для контроллера.
@RequestMapping("/demo")
@Controller
public class DemoController {
@Autowired
CityBean city;
@RequestMapping(value = "/hello/{name}", method = RequestMethod.GET)
public ModelAndView helloWorld(@PathVariable("name") String name, Model model) {
Map<String, Object> myModel = new HashMap<String, Object>();
model.addAttribute("hello", name);
model.addAttribute("test", "test in " + city.getDomainName() + " !!! ");
return new ModelAndView("v3/test", "m", model);
}
}
Мои вопросы:
1) Есть ли состояние гонки? Я боюсь переключения контекста, который уничтожит мое приложение в среде с несколькими запросами.
2) Я знаю другое решение, которое создает контроллер для каждого запроса, но более подвержено ошибкам, чем текущее решение. Потому что другой разработчик может забыть контрольные контроллеры для запроса.
Как я могу сделать контроллеры глобально запрашивать область? Просто из-за того, что мало любопытно.
Благодаря ...
Класс CityBean исходит из другой библиотеки наследия. Большое спасибо за ваше предложение. – Ozgur