spring常用的注解

来源:互联网 发布:好老板进销存软件 编辑:程序博客网 时间:2024/05/21 17:48

@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

@Controllerpublic 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:8080Accept                  text/html,application/xhtml+xml,application/xml;q=0.9Accept-Language         fr,en-gb;q=0.7,en;q=0.3Accept-Encoding         gzip,deflateAccept-Charset          ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-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从单词的字面意思上就能看出来他们的异同。

原创粉丝点击