引荐教程:Spring教程
一、组件型注解:
1、@Component 在类定义之前增加@Component注解,他会被spring容器辨认,并转为bean。
2、@Repository 对Dao完成类举行注解 (特别的@Component)
3、@Service 用于对营业逻辑层举行注解, (特别的@Component)
4、@Controller 用于掌握层注解 , (特别的@Component)
以上四种注解都是注解在类上的,被注解的类将被spring初始话为一个bean,然后统一管理。
二、请乞降参数型注解:
1、@RequestMapping:用于处置惩罚要求地点映照,能够作用于类和要领上。
●value:定义request要求的映照地点
●method:定义地request址要求的体式格局,包括【GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE.】默许接收get要求,假如要求体式格局和定义的体式格局不一样则要求没法胜利。
●params:定义request要求中必需包括的参数值。
●headers:定义request要求中必需包括某些指定的要求头,如:RequestMapping(value = "/something", headers = "content-type=text/*")申明要求中必须要包括"text/html", "text/plain"这中范例的Content-type头,才是一个婚配的要求。
●consumes:定义要求提交内容的范例。
●produces:指定返回的内容范例,仅当request要求头中的(Accept)范例中包括该指定范例才返回
@RequestMapping(value="/requestTest.do",params = {"name=sdf"},headers = {"Accept-Encoding=gzip, deflate, br"},method = RequestMethod.GET) public String getIndex(){ System.out.println("要求胜利"); return "index"; }
上面代码示意要求的体式格局为GET要求,要求参数必需包括name=sdf这一参数,然后要求头中必需有 Accept-Encoding=gzip, deflate, br这个范例头。
如许经由过程注解就能对一个要求举行约束了。
2.@RequestParam:用于猎取传入参数的值
●value:参数的称号
●required:定义该传入参数是不是必需,默许为true,(和@RequestMapping的params属性有点相似)
@RequestMapping("/requestParams1.do") public String requestParams1(@RequestParam(required = false) String name){ System.out.println("name = "+name); return "index"; } @RequestMapping("/requestParams2.do") public String requestParams2(@RequestParam(value = "name",required = false) String names){ System.out.println("name = "+names); return "index"; }
两种请入参体式格局是一样的,显现声明value的称号时,入参参数名和value一样,没有显现声明的话,像第一种体式格局声明的,入参参数名和函数参数变量名一样。
3.@PathViriable:用于定义途径参数值
●value:参数的称号
●required:定义传入参数是不是为必需值
@RequestMapping("/{myname}/pathVariable2.do") public String pathVariable2(@PathVariable(value = "myname") String name){ System.out.println("myname = "+name); return "index"; }
这个途径声清楚明了{myname}作为途径参数,那末这一段途径将为恣意值,@PathVariable将能够依据value猎取途径的值。
4.@ResponseBody:作用于要领上,能够将全部返回效果以某种花样返回,如json或xml花样。
@RequestMapping("/{myname}/pathVariable2.do") @ResponseBody public String pathVariable2(@PathVariable(value = "myname") String name){ System.out.println("myname = "+name); return "index"; }
它返回的不是一个页面,而是把字符串“index”直接在页面打印出来了,这实在和以下代码时相似的。
PrintWriter out = resp.getWriter(); out.print("index"); out.flush();
5、@CookieValue:用于猎取要求的Cookie值
@RequestMapping("/requestParams.do") public String requestParams(@CookieValue("JSESSIONID") String cookie){ return "index"; }
6、@ModelAttribute:
用于把参数保留到model中,能够注解要领或参数,注解在要领上的时刻,该要领将在处置惩罚器要领实行之前实行,然后把返回的对象存放在 session(条件时要有@SessionAttributes注解) 或模子属性中,@ModelAttribute(“attributeName”) 在标记要领的时刻指定,若未指定,则运用返回范例的类称号(首字母小写)作为属性称号。
@ModelAttribute("user") public UserEntity getUser(){ UserEntity userEntityr = new UserEntity(); userEntityr.setUsername("asdf"); return userEntityr; } @RequestMapping("/modelTest.do") public String getUsers(@ModelAttribute("user") UserEntity user){ System.out.println(user.getUsername()); return "/index"; }
如上代码中,运用了@ModelAttribute("user")注解,在实行掌握器前实行,然后将生成一个称号为user的model数据,在掌握器中我们经由过程注解在参数上的@ModelAttribute猎取参数,然后将model应用到掌握器中,在jsp页面中我们一样能够运用它,
<body> ${user.username} </body>
7、@SessionAttributes
默许情况下Spring MVC将模子中的数据存储到request域中。当一个要求完毕后,数据就失效了。假如要跨页面运用。那末须要运用到session。而@SessionAttributes注解就能够使得模子中的数据存储一份到session域中。合营@ModelAttribute("user")运用的时刻,会将对应的称号的model值存到session中,
@Controller @RequestMapping("/test") @SessionAttributes(value = {"user","test1"}) public class LoginController{ @ModelAttribute("user") public UserEntity getUser(){ UserEntity userEntityr = new UserEntity(); userEntityr.setUsername("asdf"); return userEntityr; } @RequestMapping("/modelTest.do") public String getUsers(@ModelAttribute("user") UserEntity user ,HttpSession session){ System.out.println(user.getUsername()); System.out.println(session.getAttribute("user")); return "/index"; } }
连系上一个例子的代码,加了@SessionAttributes注解,然后要求了两次,第一次session中不存在属性名为user的值,第二次要求的时刻发明session中又有了,这是由于,这是由于第一次要求时,model数据还未保留到session中要求完毕返回的时刻才保留,在第二次要求的时刻已能够猎取上一次的model了
注重:@ModelAttribute("user") UserEntity user猎取注解内容的时刻,会先查询session中是不是有对应的属性值,没有才去查询Model。
以上就是springmvc经常使用5种注解的细致内容,更多请关注ki4网别的相干文章!