У меня есть некоторые серьезные сомнения в отношении зависимостей bean-компонентов области действия из-за недостатка знаний о Spring.
Я прочитал справочное руководство по 3.5.4.5 Bean-компонентам в качестве зависимостей и успешно реализовал пример этого.
Однако прежде чем идти дальше, я хотел бы поделиться своими проблемами.
Позвольте мне поделиться своим примером использования и небольшими деталями реализации
Для каждого запроса пользователя, который я хотел бысоздать город для каждого пользователя.
@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) Мне известно о другом решении, которое создает контроллер для запроса, но оно более подвержено ошибкам, чем текущее решение.Потому что другой разработчик может забыть определить контроллеры для отправки запроса.
Как сделать так, чтобы контроллеры глобально запрашивали область действия?Просто из-за маленького любопытства.
Спасибо ...