目录
1.@Controller
1.1 使用用途:指示Spring类的实例是一个负责处理具体业务逻辑的控制器;
1.2 使用位置:类;
1.3 使用说明:在SpringMVC配置文件中配置<context:component-scan base-package="org.***." />元素,启动包扫描功能,以便带注解的类成为Spring的Bean,base-package:需要扫描的类包及其子包;
1.4 注解支持的属性:无
1.5 应用示例
2.@RequestMappering
2.1 使用用途:指示Spring用哪一个类或者方法来处理请求动作,完成请求映射;
2.2 使用位置:类、方法
2.3 注解支持的属性:
2.3.1 value属性:
1)默认属性,用于指定请求的实际地址映射到方法上;
2)格式:@RequestMapping(value="/hello") 或者 @RequestMapping(/hello")仅存在value单一属性情况下使用后者;
2.3.2 method属性:
1)说明:指示该方法仅处理哪些类型的HTTP请求方式,例如GET、POST、PUT、DELETE等;
2)格式:@RequestMapping(value="/hello",method=RequestMethod.POST)
2.3.3 consumes属性:
1)说明:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;;
2)格式:@RequestMapping(value="/hello",method=RequestMethod.POST,consumes="application/json")
2.3.4 produces属性:
1)说明:指定返回的内容类型,返回的内容类型必须是request请求头(Accept)中所包含的类型;
2)格式:@RequestMapping(value="/hello",method=RequestMethod.POST ,produces="application/json")
2.3.5 params属性:
1)说明:指定request中必须包含某些参数值时才让该方法处理;
2)格式:@RequestMapping(value="/hello",method={RequestMethod.POST,RequestMethod.GET},params="name=Aaron")
2.3.6 headers属性
1)说明:指定request必须包含某些指定的header值,才让该方法类处理;
2)格式:@RequestMapping(value="/hello",method=RequestMethod.POST ,headers="Rererer=http://....")
2.4 应用示例
3.@RequestParam
3.1 使用用途:用于将指定的请求参数赋值给方法中的形参;
3.2 使用位置:方法、方法参数
3.3 注解支持的属性:
3.3.1 name属性:
1)说明:指定请求头绑定的名称;
3.3.2 value属性:
1)说明:name属性的别名;
2)格式:public ModelAndView login(@RequestParam(value="userName") String userName){}
3.3.3 required属性:
1)说明:指示参数是否必须绑定
2)格式:public ModelAndView login(@RequestParam(value="userName",required = true ) String userName){}
3.3.4 defaultValue属性:
1)说明:若没有传递参数,使用默认值
2)格式:public ModelAndView login(@RequestParam(value="userName",required = true ,defaultValue="admin") String userName){}
3.4 使用示例
4.@PathVariable
4.1 使用用途:获得请求URL中的动态参数;
4.2 使用位置:方法参数
4.3 注解支持的属性:
1)说明:只支持一个String类型的value属性,表示绑定的名称,若省略则默认绑定同名参数,例如地址栏地址为:http://localhost:8080/demo/pathVariableTest/Aaron;则userName将被赋值为Aaron;
2)格式:
@RequestMapping(value="/pathVariableTest/{userName}")
public void pathVariableTest(@PathVariable String userName){}
4.4 使用示例
浏览器请求地址:
后台控制器中的方法:
5.@RequestHeader
5.1 使用用途:用于将请求的头信息区数据映射到功能处理方法的参数上;
5.2 使用位置:方法参数
5.3 注解支持属性:
5.3.1 name属性:
1)说明:指定请求头绑定的名称;
5.3.2 value属性:
1)说明:name属性的别名;
2)格式:public void requestHeaderTest(@RequestHeader(value="Accept") String[] accepts)
5.3.2 required、defaultValue属性:与其他注解的同名属性同理,不在表述;
5.5 使用示例
6.@CookieValue
6.1 使用用途:用于将请求的Cookie数据映射到功能处理方法的参数上;
6.2 使用位置:方法参数
6.3 注解支持的属性:name、value、required和defaultValue属性,与其他注解的同名属性同理,不在表述;
6.4 注解格式示例:
public void cookieValueTest(@CookieValue(value="JSESSIONID",defaultValue="") String sessionId)
6.5 使用示例
7.@SessionAttributes
7.1 使用用途:注解允许我们有选择地指定Model中哪些属性需要转存到HttpSession对象中;
7.2 使用位置:只能声明在类上,不能声明在方法上;
7.3 注解支持的属性:
7.3.1 names属性:
1)说明:Model中属性的名称,即存储在HttpSession当中的属性名称;
7.3.2 value属性:
1)说明:names属性的别名;
2)格式:@SessionAttributes(value="user")/ @SessionAtributes(value={"user","dept"})
7.3.3 types属性:
1)说明:指定放入HttpSession当中对象的类型;
2)格式:@SessionAtributes(types={User.class,Dept.class},value={"user","dept"})
7.4 使用示例
8.@ModelAttributes
8.1 使用用途:将请求参数绑定到Model对象;
8.2 使用位置:方法
8.3 支持的属性:仅支持类型为String的value属性,表示绑定属性的名称;
9.@Resource和@Autowired
9.1 使用用途:@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入;
9.2 共同点:两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。
9.3 不同点:
9.3.1 :@Autowired:
1)@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。
public class TestServiceImpl {
// 下面两种@Autowired只要使用一种即可
@Autowired
private UserDao userDao; // 用于字段上
@Autowired
public void setUserDao(UserDao userDao) { // 用于属性的方法上
this.userDao = userDao;
}
}
2)@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:
public class TestServiceImpl {
@Autowired
@Qualifier("userDao")
private UserDao userDao;
}
9.3.2 :@Resource:
1)@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。
2)@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。
public class TestServiceImpl {
// 下面两种@Resource只要使用一种即可
@Resource(name="userDao")
private UserDao userDao; // 用于字段上
@Resource(name="userDao")
public void setUserDao(UserDao userDao) { // 用于属性的setter方法上
this.userDao = userDao;
}
}