SpringMVC--常用註解(詳解)

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

 

@Controller

註解作用:

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

[java] view plain copy print?

  1. @Controller  
  2. @RequestMapping("/danyuan")  
  3. public class FqDanyuanAction extends BaseAction {  
  4. }  
@Controller
@RequestMapping("/danyuan")
public class FqDanyuanAction extends BaseAction {
}

對比ssh注入方式:

 

對比spring.xml 向bean注入Service

 

[html] view plain copy print?

  1. <!-- 商品模塊的Action -->  
  2. <bean id="productAction" class="cn.itcast.shop.product.action.ProductAction" scope="prototype">  
  3.     <property name="productService" ref="productService"/>  
  4. </bean>  
<!-- 商品模塊的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提交:

[java] view plain copy print?

  1. public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{}  
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{}

 

 

RequestMapping囊括了更多可配置的參數,不僅僅有提交表單的方式,而且有方法級別響應url請求的地址等信息,更加靈活。

 

 

@Autowired

註解作用:

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

[java] view plain copy print?

  1. @Autowired  
  2.  FqGongnengService gongnengService;  
        @Autowired
	private FqGongnengService gongnengService;

action裏面get,set注入

[java] view plain copy print?

  1.       // 注入商品的Service  
  2. private ProductService productService;  
  3.   
  4. public void setProductService(ProductService productService) {  
  5.     this.productService = productService;  
  6. }  
       // 注入商品的Service
	private ProductService productService;

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

@ResponseBody

註解作用:

直接放在方法上,表示返回類型將會直接作爲Http響應字節流輸出,可以用於Ajax。

 

@Valid

註解作用:

實體設置+類+類的引用,直接將頁面中封裝的實體對象信息封裝@Valid後面定義的實體中。

[java] view plain copy print?

  1. @RequestMapping(value="/editDishInfo.json", method=RequestMethod.POST)  
  2. @ResponseBody  
  3.     public Object updateDishInfo(@Valid SnDishInfo dishInfo, BindingResult result,  HttpServletRequest request){  
  4.         if(result.hasErrors()){  
  5.             return getServiceErrors(result);  
  6.         }  
  7.         //獲取當前登錄用戶的用戶名  
  8.         String loginuser = getLoginUsername(request);  
  9.   
  10.         dishInfo.setLmuser(loginuser);  
  11.         //修改菜品分類信息  
  12.         return dishInfoService.updateDishInfo(dishInfo, request);  
  13.   
  14.     }  
@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:參數沒有傳遞時爲參數默認指定的值

[java] view plain copy print?

  1.        /** 
  2.  * 獲取單元列表數據 
  3.  *  
  4.  * @param scfquuid 
  5.  * @param page 
  6.  * @param pagesize 
  7.  * @param sortname 
  8.  * @param sortorder 
  9.  * @param request 
  10.  * @return 
  11.  */  
  12. @RequestMapping(value="/listdata.json" , method={RequestMethod.GET, RequestMethod.POST})  
  13. public ListData listdata(@RequestParam(value="leftData")String scfquuid,  
  14.         Integer page, Integer pagesize, String sortname, String sortorder, HttpServletRequest request){  
  15.     if(page==null){  
  16.         page = 1;  
  17.     }  
  18.     if(pagesize==null){  
  19.         pagesize = getDefaultPageSize();  
  20.     }  
  21.       
  22.     ListData data = danyuanService.list(scfquuid, page, pagesize, sortname, sortorder);  
  23.     return data;  
  24. }  
        /**
	 * 獲取單元列表數據
	 * 
	 * @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的模板

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章