SpringMVC--常用註解(詳解)

ZeroWM發表於2016-01-04


  SSH每個框架,都要有自己的xml配置檔案,這些配置檔案要跟原始碼同步,否則很容易報錯。當初做網上商城專案的時候,就是因為這個原因,看的眼花繚亂,很是頭疼。註解的作用跟配置檔案的作用是一樣的,它不僅僅包含功能性的程式碼實現,還可以新增後設資料(對資料的描述)。但是跟註釋功能一個天南一個海北,它不是用來為程式碼提供說明性文字的,而是實現程式功能的重要組成部分。下面,我對比的介紹一下SpringMVC常用的一些註解。


@Controller

註解作用:

註冊Bean到Spring上下文,Bean的預設ID為類名稱首字母小寫,也可以自己指定。

@Controller
@RequestMapping("/danyuan")
public class FqDanyuanAction extends BaseAction {
}

對比ssh注入方式:

對比spring.xml 向bean注入Service
<!-- 商品模組的Action -->
<bean id="productAction" class="cn.itcast.shop.product.action.ProductAction" scope="prototype">
	<property name="productService" ref="productService"/>
</bean>

@RequestMapping(value="",method={"",""},headers={},params={"",""})

引數:

value:設定訪問地址

method:設定訪問方式,常用的method=RequestMethod.POST,和method=RequestMethod.GET

headers:頭域,可以設定瀏覽器支援的格式

params:訪問引數設定

註解作用:

用來定義訪問的url。可以是方法級別的,也可以是類級別的。兩者可以協同工作,縮小選擇範圍。也可以隱藏程式碼的真實路徑,更加具有安全性和可讀性。

對比Servlet的get提交:

public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{}
RequestMapping囊括了更多可配置的引數,不僅僅有提交表單的方式,而且有方法級別響應url請求的地址等資訊,更加靈活。

@Autowired

註解作用:

可以對成員變數、方法和建構函式進行標註,來完成自動裝配工作。可以消除get,set方法。

        @Autowired
	private FqGongnengService gongnengService;

action裡面get,set注入

       // 注入商品的Service
	private ProductService productService;

	public void setProductService(ProductService productService) {
		this.productService = productService;
	}


@ResponseBody

註解作用:

直接放在方法上,表示返回型別將會直接作為Http響應位元組流輸出,可以用於Ajax。


@Valid

註解作用:

實體設定+類+類的引用,直接將頁面中封裝的實體物件資訊封裝@Valid後面定義的實體中。

@RequestMapping(value="/editDishInfo.json", method=RequestMethod.POST)
@ResponseBody
	public Object updateDishInfo(@Valid SnDishInfo dishInfo, BindingResult result,  HttpServletRequest request){
		if(result.hasErrors()){
			return getServiceErrors(result);
		}
		//獲取當前登入使用者的使用者名稱
		String loginuser = getLoginUsername(request);

		dishInfo.setLmuser(loginuser);
		//修改菜品分類資訊
		return dishInfoService.updateDishInfo(dishInfo, request);

	}
有了這個註解,就不用request.getParameter("")了,jsp頁面上控制元件的name屬性  跟實體欄位一樣,這樣不用主動獲取,就能自動的拿到頁面控制元件的值了。

@RequestParam(required=,value="",defaultValue="")

引數:

required:引數是否必須,boolean型別,預設為true

value:傳遞的引數名稱,String型別,可選項,有值則對應方法的引數

defaultValue:引數沒有傳遞時為引數預設指定的值

        /**
	 * 獲取單元列表資料
	 * 
	 * @param scfquuid
	 * @param page
	 * @param pagesize
	 * @param sortname
	 * @param sortorder
	 * @param request
	 * @return
	 */
	@RequestMapping(value="/listdata.json" , method={RequestMethod.GET, RequestMethod.POST})
	public ListData listdata(@RequestParam(value="leftData")String scfquuid,
			Integer page, Integer pagesize, String sortname, String sortorder, HttpServletRequest request){
		if(page==null){
			page = 1;
		}
		if(pagesize==null){
			pagesize = getDefaultPageSize();
		}
		
		ListData data = danyuanService.list(scfquuid, page, pagesize, sortname, sortorder);
		return data;
	}
	

leftData是頁面框架中定義的全域性變數,通過RequestParam就可以拿到全域性變數的值,並賦值給scfquui了。


@PathVariable

註解作用:

用於方法中的引數,表示方法引數繫結到地址URL的模板



封裝讓我們的生活變的更加的靈活,簡潔。博文如果有什麼有待改進的地方,還望多多指點O(∩_∩)O~。



相關文章