[英]How to use @Inject in Spring MVC Controller?
我正在使用Spring MVC控制器。 我有一個控制器作為DataController
。
我正在考慮使用@Inject
將HttpServletRequest
添加為DataController
類頂部的可注入對象。
@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
:從語義上講,這絕對是錯誤的。
原因 : HttpServletRequest
是僅在用戶發送請求時創建的對象,並在完成請求的用戶操作后銷毀。 您可以簡單地以這種方式(從語法角度)存儲它,但不應該(從語義角度)存儲它。 您需要認識到Web應用程序的工作方式與桌面應用程序並不完全相同(並且不要從同一角度觀察它們)。
建議 :
@RequestMapping(value = "process", method = RequestMethod.GET)
public @ResponseBody
DataResponse processTask(@RequestParam("workflow") final String workflow, HttpServletRequest request) {...}
這樣,每次調用processTask
方法時,您都會獲得相應的請求。 (HttpServletRequest對象由@RequestMapping
注入。)
(如果您想在整個會話過程中保留某些內容,請考慮使用一個
建議 :
@Inject private UserService userService;
(假設我們注冊了一個名為UserService
的類。)
據我所知,您不能“注入” HttpServletRequest的唯一方法就是將其添加為方法成員。 像這樣:
@Controller
public class DataController {
// .. some code here
@RequestMapping(value = "process", method = RequestMethod.GET)
public @ResponseBody
DataResponse processTask(@RequestParam("workflow") final String workflow,HttpServletRequest request) {
String ipAddress = request.getRemoteAddr();
System.out.println(ipAddress);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.