SSH每個框架,都要有自己的xml配置文件,這些配置文件要跟源碼同步,否則很容易報錯。當初做網上商城項目的時候,就是因爲這個原因,看的眼花繚亂,很是頭疼。註解的作用跟配置文件的作用是一樣的,它不僅僅包含功能性的代碼實現,還可以添加元數據(對數據的描述)。但是跟註釋功能一個天南一個海北,它不是用來爲代碼提供說明性文字的,而是實現程序功能的重要組成部分。下面,我對比的介紹一下SpringMVC常用的一些註解。
@Controller
註解作用:
註冊Bean到Spring上下文,Bean的默認ID爲類名稱首字母小寫,也可以自己指定。
[java] view plain copy print?
- @Controller
- @RequestMapping("/danyuan")
- public class FqDanyuanAction extends BaseAction {
- }
@Controller
@RequestMapping("/danyuan")
public class FqDanyuanAction extends BaseAction {
}
對比ssh注入方式:
對比spring.xml 向bean注入Service
[html] view plain copy print?
- <!-- 商品模塊的Action -->
- <bean id="productAction" class="cn.itcast.shop.product.action.ProductAction" scope="prototype">
- <property name="productService" ref="productService"/>
- </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?
- 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?
- @Autowired
- FqGongnengService gongnengService;
@Autowired
private FqGongnengService gongnengService;
action裏面get,set注入
[java] view plain copy print?
- // 注入商品的Service
- private ProductService productService;
- public void setProductService(ProductService productService) {
- this.productService = productService;
- }
// 注入商品的Service
private ProductService productService;
public void setProductService(ProductService productService) {
this.productService = productService;
}
@ResponseBody
註解作用:
直接放在方法上,表示返回類型將會直接作爲Http響應字節流輸出,可以用於Ajax。
@Valid
註解作用:
實體設置+類+類的引用,直接將頁面中封裝的實體對象信息封裝@Valid後面定義的實體中。
[java] view plain copy print?
- @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);
- }
@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?
- /**
- * 獲取單元列表數據
- *
- * @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;
- }
/**
* 獲取單元列表數據
*
* @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的模板