【发布时间】:2014-06-10 23:21:36
【问题描述】:
我正在使用 Spring MVC 控制器。我的控制器之一是DataController。
我正在考虑使用@Inject 在DataController 类的顶部添加HttpServletRequest 作为可注入对象。
@Controller
public class DataController {
@Inject
HttpServletRequest request;
// .. some code here
@RequestMapping(value = "process", method = RequestMethod.GET)
public @ResponseBody
DataResponse processTask(@RequestParam("workflow") final String workflow) {
String ipAddress = request.getRemoteAddr();
System.out.println(ipAddress);
}
所以我的问题是 - 这是使用 @Inject 的正确方法吗?我以前从未使用过@Inject,所以试图了解我这样做的方式是否正确?由于每次调用processTask 方法的人,我都需要获取调用processTask 方法的人的ipAddress。
【问题讨论】:
-
你可以试试...
-
该控制器在其生命周期内是否需要一个
HttpServletRequest?请记住,控制器本质上只是另一个对象。请求通常应作为方法参数传入,因为每个请求都会调用一次该方法。 -
@chrylis 这将是一个请求范围的bean,每个请求的值不同。
-
@SotiriosDelimanolis 你说的“那个”是什么意思?提供的代码是默认的单例范围的。 (无论如何,就测试和模块化而言,方法注入是正确的。)
-
@chrylis Spring 将注入
HttpServletRequest的代理,其中将包含一个ObjectFactory,它将在请求时检索实际HttpServletRequest(例如:方法调用)。这只能在该请求可用的上下文中工作(如这里)。它会在其他任何地方失败。
标签: java spring spring-mvc