簡體   English   中英

如何在Spring MVC Controller中使用@Inject?

[英]How to use @Inject in Spring MVC Controller?

我正在使用Spring MVC控制器。 我有一個控制器作為DataController

我正在考慮使用@InjectHttpServletRequest添加為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);

}

再看看Spring MVC @AutoWired響應不起作用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM