CGLib Proxy для Integer (финальный класс) в Spring MVC - PullRequest
0 голосов
/ 18 февраля 2011

Мне нужно такое использование:

Для каждого запроса я хочу внедрить userId в DemoController Но из-за того, что я являюсь конечным классом без пустого конструктора, я не могу внедрить его. Какова лучшая практика в таких случаях? Служба с объемом запроса в порядке?

@Configuration
public class CityFactory{

   @Bean(name = {"currentUserId")
   @Scope(value = WebApplicationContext.SCOPE_REQUEST,proxyMode = ScopedProxyMode.TARGET_CLASS)
   @Autowired
   public Integer getUserId(HttpServletRequest request) {
       return UserUtil.getCurrentUserId(request.getServerName());
   }
}


@RequestMapping("/demo")
@Controller
public class DemoController {

    @Autowired
    Ingeter userId;

    @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("user", userId);
        return new ModelAndView("v3/test", "m", model);
    }
}

Ответы [ 2 ]

3 голосов
/ 18 февраля 2011

Лучше всего создать явный класс с именем UserId, который в свою очередь содержит целое число. Это не только будет лучше играть с прокси CGLIB, но и прояснит ваш дизайн.

0 голосов
/ 26 сентября 2017

Вы можете использовать поставщика или поставщика

@Configuration
public class CityFactory{

   @Bean
   @Autowired
   public Supplier<Integer> getUserId(HttpServletRequest request) {
       return () -> UserUtil.getCurrentUserId(request.getServerName());
   }
}
@RequestMapping("/demo")
@Controller
public class DemoController {

    @Autowired
    Supplier<Ingeter> getUserId;
...