国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - spring mvc中注解@ModelAttribute的妙用分享

spring mvc中注解@ModelAttribute的妙用分享

2020-12-31 15:49雨中漫步,惟情而已 Java教程

這篇文章主要給大家介紹了關于spring mvc中注解@ModelAttribute妙用的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Android具有一定的參考學習價值,需要的朋友們下面來一起看看吧。

前言

本文主要給大家介紹了關于spring mvc注解@ModelAttribute妙用的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

在Spring mvc中,注解@ModelAttribute是一個非常常用的注解,其功能主要在兩方面:

  1. 運用在參數上,會將客戶端傳遞過來的參數按名稱注入到指定對象中,并且會將這個對象自動加入ModelMap中,便于View層使用;
  2. 運用在方法上,會在每一個@RequestMapping標注的方法前執行,如果有返回值,則自動將該返回值加入到ModelMap中;

一般開發中,第一種用法居多,本次我將使用第二種用法以期節省controller層的一些代碼:

目前使用spring mvc開發的controller層方法一般類似于:

?
1
2
3
4
@RequestMapping("/{encodeId}/detail")
public String detail(ModelMap model, @PathVariable String encodeId) {
.....
}

幾乎在每一個@RequestMapping標注的方法的參數中都會有 ModelMap model的參數,既然這是一個大概率事件,為什么不可以像注入request那樣,直接在類的開始使用@Resource進行自動注入呢?

另外一個,就是response,response也不能像request那樣進行自動注入。

類似的可能還有很多,既然這些都是controller層常用的代碼,如果能將其在一個basecontroller層自動注入,然后controller層繼承這個basecontroller,那樣就沒有必要再@RequestMapping標注的方法中寫上這些參數,使得參數個數減少,清晰。

我的思路正是使用@ModelAttribute注解,編寫一個basecontroller類,預定義一些項目中controller層常用的對象,如下:

?
1
2
3
4
5
6
@Resource
protected HttpServletRequest request;
 
protected ModelMap model;
 
protected HttpServletResponse response;

request不用解釋,可以直接使用@Resource直接注入,response和model的注入方式如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
 * 設置response
 *
 * @param response
 */
 @ModelAttribute
 private final void initResponse(HttpServletResponse response) {
 this.response = response;
 }
 
 /**
 * 設置model
 *
 * @param model
 */
 @ModelAttribute
 private final void initModelMap(ModelMap model) {
 this.model = model;
 }

spring在執行@RequestMapping前會執行上述方法,spring會和平常一樣,每次請求重新生成一個model和response,然后注入到方法的參數中,這樣就變相在繼承了這個basecontroller的controller中自動注入了response和model,在這個controller層中再也不必每次寫ModelMap和response參數,整體代碼整潔了不少。

我在項目中這樣使用暫無問題,如果哪位高手知道這種做法會有弊端或者有更好的方法,求指正!

修正:

非常感謝eBusinessMan的提醒,確實有可能在spring mvc單例模式下會出現訪問對象不一致的情況,為了防止該問題,而又能保持這種代碼的簡潔性以及確保使用spring mvc性能問題不太嚴重,我決定使用ThreadLocal來處理。

(驗證結果:request采用spring的自動注入方式是線程安全的,response、model是不安全的,采用ThreadLocal可以解決該問題)

request對象不再使用注解自動注入(也可以繼續使用注解方式注入),而使用同response和model初始化的方式,取消request、response、model三個類變量,具體如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
private static final ThreadLocal<HttpServletRequest> requestContainer = new ThreadLocal<HttpServletRequest>();
 
  private static final ThreadLocal<HttpServletResponse> responseContainer = new ThreadLocal<HttpServletResponse>();
 
  private static final ThreadLocal<ModelMap> modelContainer = new ThreadLocal<ModelMap>();
 
 /**
 * 初始化response
 *
 * @param response
 */
 @ModelAttribute
 private final void initResponse(HttpServletResponse response) {
 responseContainer.set(response);
 }
 
 /**
 * 獲取當前線程的response對象
 *
 * @return
 */
 protected final HttpServletResponse getResponse() {
 return responseContainer.get();
 }
 
 /**
 * 初始化request
 *
 * @param request
 */
 @ModelAttribute
 private final void initRequest(HttpServletRequest request) {
 requestContainer.set(request);
 }
 
 /**
 * 獲取當前線程的request對象
 *
 * @return
 */
 protected final HttpServletRequest getRequest() {
 return requestContainer.get();
 }
 
 /**
 * 設置model
 *
 * @param model
 */
 @ModelAttribute
 private final void initModelMap(ModelMap model) {
 modelContainer.set(model);
 }
 
 /**
 * 獲取當前線程的modelMap對象
 *
 * @return
 */
 protected final ModelMap getModelMap() {
 return modelContainer.get();
 }

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.cnblogs.com/liaochong/p/spring_modelattribute.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 99精品欧美一区二区三区综合在线 | 久久亚洲一区二区三区明星换脸 | 色婷婷基地 | 国产欧美日韩综合精品一区二区 | 五月天综合网 | 欧美一区二区三区久久精品 | 99精品一区二区三区 | а√天堂资源中文最新版地址 | 草久网 | 欧美一级片毛片免费观看视频 | 国产尤物一区 | 秋霞精品 | 国产精品美女久久久久久久久久久 | 久久久久久久久久久网站 | 久久精品91 | 99看片网| 中文字幕精品一区 | 极品一区 | 中文字幕亚洲区 | 依人久久久 | 亚洲aⅴ天堂av在线电影软件 | 在线观看国产 | 黄色二区| 在线视频中文字幕 | 精品国产仑片一区二区三区 | 欧美电影在线观看 | 日韩在线视频一区 | 亚洲视频在线免费观看 | 五月天一区二区 | 91 在线观看 | 一区二区三区国产视频 | 国产精品女教师av久久 | 在线免费视频一区二区 | 99re国产| xxxx网| av成人免费在线观看 | 久久久久久国产精品mv | 免费一级毛片观看 | 亚洲日本中文字幕 | 羞羞网站免费观看 | 国产v日产∨综合v精品视频 |