spring常用的註解

@controller

用於標註控制層,並且把該類注入到spring容器中,如果不指定默認的beanName爲該類的類名(首字母小寫),指定的話通過@Controller("beanName")自定義。  

@Service

用於標註業務層,功能和@Controller沒本質的區,只是爲了讓代碼的結構清晰,層次分明,可能在以後的版本中會爲各自的註解添加特定的功能(@Controller和@Service互用程序運行不會報錯,但是不建議這樣做)。

@Repository

用來標註數據層同@controller和@Repository一樣

@RequestMapping

用於進行資源的請求映射,可以放在方法和類上面。

1.既放在方法也放在類上,訪問的url爲:http://localhost:8080/項目名/haha/selectUserById

@Controller
@RequestMapping(value="/haha")
public class UserController {
    @RequestMapping(value="/selectUserById")
    public ModelAndView selectUserBy(){
        ModelAndView modelAndView = new ModelAndView();
        return modelAndView;
    }

2.只放在方法上,訪問的url爲: http://localhost:8080/項目名/selectUserById

@Controller
public class UserController {
    @RequestMapping(value="/selectUserById")
    public ModelAndView selectUserBy(){
        ModelAndView modelAndView = new ModelAndView();
        return modelAndView;
    }

說明:爲類上加上requestMapping只是對請求的url進行分類,讓url的請求變的有層次清晰。


@Resource 和 @Autowired

   @Resource是j2ee的註解,有兩個屬性比較重要,@Resource(name=" ")和@Resource(type=" "),如果指定了name屬性,那麼就在容器裏尋找匹配的id等於name的bean,找不到則拋出異常。如果指定的是type屬性,則在容器裏面查找類型匹配的唯一的bean,找不到或者找到了多個都會拋出異常。如果既沒有指定name,也沒有指定type,則默認用byName方式進行裝配,如果沒有則去按照byType類型進行匹配。

   @Autowired是spring的註解,默認按照byType類型進行匹配,如果找不到會報錯,但是@Autowired(required = false)將required設置爲false即使找不到也不會報錯。默認情況下只允許一個唯一匹配的類型的bean,如果匹配到多個則會報錯,這個時候加上@Autowired@Qualifier("beanName"),則會根據指定的beanName進行匹配。

@ResponseBody

在方法上加上該註解,將controller中方法的返回的對象通過適當的轉換器轉換爲指定的格式,然後直接寫入resposne的body中返回到客戶端,一般返回的json和xml數據。具體使用如下:

註解方式的映射器和適配器<.mvc:annotation-driven.>,他可以根據classpath中的內容提供一些功能,其中就包括支持讀寫json,但是classpath中必須有Jackson。因此,只需要開啓註解方式的映射器和適配器,並且在classpath中導入Jackson的架包,然後再方法上加@ResponseBody註解,放回的對象就會被轉換成json格式,並且寫入response的body中返回給客戶端。

@RequestMapping(value="/selectUserByIdNine")
    @ResponseBody
    public User selectUserByIdNine(){
        User user = new User();
        user.setAge(23);
        user.setName("張銳");
        return user;
    }

說明:前端控制器調用適配器來處理這個方法,處理器適配器執行完將返回的結果轉換成json格式的數據,不再返回給前端控制器進行後面的流程,而是直接把數據寫到了resoponse的body體中。


@PathVariable

  resful規則的支持,用於獲取resful規則的url中的變量的值
@RequestMapping(value="/selectUserByIdFive/{id}")
    public String seletUserByIdFive(@PathVariable("id") Integer haha,HttpServletRequest request){
        User user = userService.selectUserById(haha);
        request.setAttribute("user", user);
        return "zhangrui";
    }

如上所示,如訪問的url爲localhost:8080/項目明/selectUserByIdFive/2,則方法綁定的變量haha的值爲2, 若@PathVariable(“”)中不指定url中的變量名,則後面綁定的參數名必須和url中的變量名一致如:@PathVariable Integer id。

@requestParam

@requestParam註解應該是對request.getParameter()的封裝,從請求的request中獲取請求的參數的值,並且把獲取的String類型的參數指定的轉化爲簡單類型的參數進行綁定。該註解有三個屬性:defaultValue,required,value。value設置要獲取的request請求中的參數名,required設置是否必須綁定有參數值的傳入,defaultValue設置默認值。
@RequestMapping(value="/selectUserByIdSix")
    public String selectUserByIdSix(@RequestParam(value="userId",required=false) Integer id){
        System.out.println("id="+id);
        return "zhangrui";
    }

如上:如果不設置value的時候,後面綁定的參數的名必須和request中請求的參數名一致。如果不設置required,required默認爲true,required爲true時,意思爲必須有參數的綁定,則必須在request請求中存在綁定的參數名,如果設置required爲false,則不要求必須有參數的綁定,當在reqeust中找不到綁定的參數名時,則設置後面綁定的參數的值爲NULL,所有在這裏不能用int,否則報錯。

@RequestMapping(value="/selectUserByIdSix")
    public String selectUserByIdSix(@RequestParam(value="userId",required=false,defaultValue="10") String id){
        System.out.println("id="+id);
        return "zhangrui";
    }

如上:defaultValue設置默認值,只能是String類型,所以後面綁定的參數類型只能是String類型,不然報錯。


@RequestHeader

  用於把request請求頭上的值綁定要方法的參數上。
Host                    localhost:8080
Accept                  text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language         fr,en-gb;q=0.7,en;q=0.3
Accept-Encoding         gzip,deflate
Accept-Charset          ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive              300
@RequestMapping(value="/selectUserByIdFive")
    public String seletUserByIdFive(@RequestHeader(value="Keep-Alive",required=false,defaultValue="zhangrui") String Header){
        System.out.println("Header="+Header);
        return "zhangrui";
    }

如上所示,@RequestHeader可以從request請求頭中取得Keep-Alive 的值爲300,@RequestHeader的三個屬性的用法和@RequestParam一樣,@RequestParam和@RequestHeader從單詞的字面意思上就能看出來他們的異同。

Spring全局異常處理繼承handerExceptionResolver接口

發佈了28 篇原創文章 · 獲贊 3 · 訪問量 3517
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章