在讲解一系列注解之前,我是默认大家都知道反射和注解概念的。如果不是很清楚的话,慕课网有很多教程的。
在注解中有一个概念是作用目标(也就是注解可以作用在:包名、类名(接口、枚举、注解)、参数、方法、构造器、局部变量)
第一个知识点:@Controller注解,用于标识这个类是一个后端控制器(类似struts中的action),主要作用就是接受页面的参数,转发页面。中间的业务逻辑是调用业务类处理的这个就是MVC设计模式的思路。
我们来看下这个注解的源码:
@Target({ElementType.TYPE})// 表明只能定义在类上面
@Retention(RetentionPolicy.RUNTIME)//保留策略是RUNTIME,在JVM加载类时,会把注解加载到JVM内存中(它是唯一可以用反射来读取注解的策略)
@Documented//@Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。
@Component//spring框架规定当一个类不好归类(service、dao、controller)的时候可以使用这个注解,由此可见即便好归类内部还是使用的@Component注解
public @interface Controller {
/**
* The value may indicate a suggestion for a logical component name,
* to be turned into a Spring bean in case of an autodetected component.
* @return the suggested component name, if any
*/
String value() default "";//默认值可以是组件名称,一般不写(看上面英文解释)
}
第二个知识点:@RequestMapping注解,同上面一样,这个注解的作用目标就跟@Controller不一样了,这个注解可以定义在类上面也可以定义在方法上面。
例如:
@Controller
@RequestMapping("/springmvc")
public class Test01_RequestMapping {
/**
* 1.@RequestMapping :除了修饰方法,还可以修饰类
* 2.类定义处:提供初步的请求信息映射.相对于WEB应用的根目录(窄化请求)
* 3.方法处:提供进一步的细分映射信息。相对于类定义处的URL。
* 若类定义处为标注@RequestMapping,则方法出的URL相对于WEB应用的根目录
* @return
*/
@RequestMapping("/testRequestMapping")
public String testRequestMapping(){
System.out.println("@RequestMapping注解的作用目标");
return "success";
}
来看下这个注解的源码说明:
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
String[] value() default {};//默认值可以是多个
RequestMethod[] method() default {};//限制请求方式
String[] params() default {};//要求请求的URL包含指定的参数
。。。
}
示例代码:
/**
*
* @Title: testRequestMappingAttrMethodPost
* @Description: TODO (限制请求方式只能是POST请求)
* @Author: Hanson
* @Create Date: 2016年1月25日 下午1:38:01
* @History: 2016年1月25日 下午1:38:01 Hanson Created.
*
* @return
*
*/
@RequestMapping(value="/testRequestMappingAttrMethodPost",method={RequestMethod.POST})
public String testRequestMappingAttrMethodPost(){
System.out.println("@RequestMaping注解的属性:method RequestMethod[]{RequestMethod.POST}");
return "success";
}
/**
*
* @Title: testRequestMappingAttrMethodGet
* @Description: TODO (限制请求方式只能是GET请求)
* @Author: Hanson
* @Create Date: 2016年1月25日 下午1:37:46
* @History: 2016年1月25日 下午1:37:46 Hanson Created.
*
* @return
*
*/
@RequestMapping(value="/testRequestMappingAttrMethodGet",method={RequestMethod.GET})
public String testRequestMappingAttrMethodGet(){
//请求url "${pageContext.request.contextPath}/springmvc/testRequestMappingAttrParams?username=hanson&age=11"
System.out.println("@RequestMaping注解的属性:method RequestMethod[]{RequestMethod.GET}");
return "success";
}
这个注解还支持Ant风格的请求:
Ant风格资源地址支持3种匹配符:
?:匹配文件中的一个字符
*:匹配文件中任意字符
**:**匹配多层路径
@RequestMapping 支持 Ant 风格的 URL :
/user/*/createUser : 匹配 –/user/aaa/createUser、/user/bbb/createUser 等 URL
/user/*/createUser : 匹配 –/user/aaa/createUser、/user/bbb/createUser 等 URL
/user/**/createUser : 匹配 –/user/createUser、/user/aaa/bbb/createUser 等 URL
/user/createUser?? : 匹配 –/user/createUseraa、/user/createUserbb 等 URL
例如:下面这种请求:
href="${pageContext.request.contextPath}/springmvc/testAntStyleURL/ccccc/abc"
示例代码:
/**
*
* @Title: testAntStyleURL
* @Description: TODO (测试@RequestMapping支持Ant风格的URL)
* @Author: Hanson
* @Create Date: 2016年1月25日 下午1:46:46
* @History: 2016年1月25日 下午1:46:46 Hanson Created.
*
* @return
*
*/
@RequestMapping("testAntStyleURL/*/abc")
public String testAntStyleURL(){
System.out.println("AntStyleURL:testAntStyleURL/*/abc");
return "success";
}
学完这一章你应该知道@Controller注解的作用范围,表示的类是一个后端控制器。
@RequestMapping注解的作用范围,在类上和在目标方法上的区别以及作用,以及能够限制请求方式等。有不明白的留言。谢谢
点击查看更多内容
25人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦