1. 程式人生 > >spring/springmvc常用註解

spring/springmvc常用註解

spring常用註解
1、@Component
@Component
是所有受Spring 管理元件的通用形式,@Component註解可以放在類的頭上,@Component不推薦使用。
2、@Controller  標識表現層,控制層元件
@Controller對應表現層的Bean,也就是Actio
@Controller
@Scope("prototype")
public class UserAction extends BaseAction<User>{
……
}
使用@Controller註解標識UserAction之後,就表示要把UserAction交給Spring容器管理,在Spring容器中會存在一個名字為"userAction"的action,這個名字是根據UserAction類名來取的。注意:如果@Controller不指定其value【@Controller】,則預設的bean名字為這個類的類名首字母小寫,如果指定value【@Controller(value="UserAction")】或者【@Controller("UserAction")】,則使用value作為bean的名字。


這裡的UserAction還使用了@Scope註解,@Scope("prototype")表示將Action的範圍宣告為原型,可以利用容器的scope="prototype"來保證每一個請求有一個單獨的Action來處理,避免struts中Action的執行緒安全問題。spring 預設scope 是單例模式(scope="singleton"),這樣只會建立一個Action物件,每次訪問都是同一Action物件,資料不安全,struts2 是要求每次次訪問都對應不同的Action,scope="prototype" 可以保證當有請求的時候都建立一個Action物件


3、@Service
@Service對應的是業務層Bean
4、@ Repository
@Repository對應資料訪問層Bean


@Autowired顧名思義,就是自動裝配,其作用是為了消除程式碼Java程式碼裡面的getter/setter與bean屬性中的property。當然,getter看個人需求,如果私有屬性需要對外提供的話,應當予以保留。
@Autowired預設按型別匹配的方式,在容器查詢匹配的Bean,當有且僅有一個匹配的Bean時,Spring將其注入@Autowired標註的變數中。
@Resource的裝配順序:
(1)、@Resource後面沒有任何內容,預設通過name屬性去匹配bean,找不到再按type去匹配
(2)、指定了name或者type則根據指定的型別去匹配bean
(3)、指定了name和type則根據指定的name和type去匹配bean,任何一個不匹配都將報錯


然後,區分一下@Autowired和@Resource兩個註解的區別:
(1)、@Autowired預設按照byType方式進行bean匹配,@Resource預設按照byName方式進行bean匹配
(2)、@Autowired是Spring的註解,@Resource是J2EE的註解,這個看一下匯入註解的時候這兩個註解的包名就一清二楚了




@ResponseBody
@ResponseBody該註解將controller的方法返回物件,通過適當的HttpMessageConverter轉換為指定格式後寫入到Response物件的body資料區。通常用來返回json資料或者是xml資料,需要注意的呢,在使用此註解之後不會在走檢視處理器,而是直接將資料寫入到輸入流中,他的效果等同於通過response物件輸出指定格式的資料。


       返回的資料不是html標籤的頁面,而是其他某種資料的格式時(json、xml)等使用。
   


   
使用PathVariable,需要在web.xml中配置rest風格的配置
@PathVariable(org.springframework.web.bind.annotation.PathVariable;)
@PathVariable 對映 URL 繫結的佔位符
帶佔位符的 URL 是 Spring3.0 新增的功能,該功能在SpringMVC 向 REST 目標挺進發展過程中具有里程碑的意義
通過 @PathVariable 可以將 URL 中佔位符引數繫結到控制器處理方法的入參中:URL 中的 {xxx} 佔位符可以通過@PathVariable(“xxx“) 繫結到操作方法的入參中。
一個介面例子:
@RequestMapping({value="openArticle-{categoryId}-{contentId}"},method=RequestMethod.GET/post)
    @ResponseBody
    public String openArticle(HttpServletRequest request, @PathVariable String categoryId, @PathVariable String contentId) {
        Map<String,Object> rm = new HashMap<String,Object>();
        try {
            rm.put("msg", "true");
            rm.put("code",0);
            rm.put("result",articleService.openArticle(categoryId,contentId));
        } catch (Exception e) {
            e.printStackTrace();
            rm.put("msg", "提醒異常,請聯絡相關人員進行處理!");
            rm.put("code", 1);
            rm.put("result", new ArrayList());
        }
        return JsonUtil.toJsonString(rm);
    }
html中請求:
<a href="springmvc/openArticle/8-15">testPathVariable</a>