这一章先把支持注解的功能加上,这样就不需要经常地修改配置文件了。
至于视图处理的地方,就还是先用json吧,找时间再写。
项目地址在:https://github.com/hjx601496320/aMvc 。
测试代码在:https://github.com/hjx601496320/amvc-test 。
怎么写呢?
因为在之前写代码的时候,我把每个类要做的事情分的比较清楚,所以在添加这个功能的时候写起来还是比较简单的,需要修改的地方也比较小。
这一章里我们需要干的事情有:
定义一个注解,标识某一个class中的被添加注解的方法是一个UrlMethodMapping。 修改配置文件,添加需要扫描的package。 写一个方法,根据package中值找到其中所有的class。 在UrlMethodMapping的工厂类UrlMethodMappingFactory中新加一个根据注解创建UrlMethodMapping的方法。 在Application中的init()方法中,根据是否开启注解支持,执行新的工厂类方法。 完了。多么简单呀~~~
现在开始写
定义一个注解Request
关于怎样自定义注这件事,大家可以上网搜一下,比较简单。我这里只是简单的说一下。我先把代码贴出来:
import com.hebaibai.amvc.RequestType;import java.lang.annotation.*;/** * 表示这个类中的,添加了@Request注解的method被映射为一个http地址。 * * @author hjx */@Documented@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface Request { /** * 请求类型 * 支持GET,POST,DELETE,PUT * * @return */ RequestType[] type() default {RequestType.GET, RequestType.POST, RequestType.DELETE, RequestType.PUT}; /** * 请求地址 * 添加在class上时,会将value中的值添加在其他方法上的@Request.value()的值前,作为基础地址。 * * @return */ String value() default "/";}
定义一个注解,需要用到一下几个东西:
1:@interface:说明这个类是一个注解。
2:@Retention:注解的保留策略,有这么几个取值范围:
代码 | 说明 |
---|---|
@Retention(RetentionPolicy.SOURCE) | 注解仅存在于源码中 |
@Retention(RetentionPolicy.CLASS) | 注解会在class字节码文件中存在 |
@Retention(RetentionPolicy.RUNTIME) | 注解会在class字节码文件中存在,运行时可以通过反射获取到 |
因为我们在程序中需要取到自定义的注解,所以使用:RetentionPolicy.RUNTIME。
3:@Target:作用目标,表示注解可以添加在什么地方,取值范围有:
代码 | 说明 |
---|---|
@Target(ElementType.TYPE) | 接口、类、枚举、注解 |
@Target(ElementType.FIELD) | 字段、枚举的常量 |
@Target(ElementType.METHOD) | 方法 |
@Target(ElementType.PARAMETER) | 方法参数 |
@Target(ElementType.CONSTRUCTOR) | 构造函数 |
@Target(ElementType.LOCAL_VARIABLE) | 局部变量 |
@Target(ElementType.ANNOTATION_TYPE) | 注解 |
@Target(ElementType.PACKAGE) | 包 |
新闻热点
疑难解答
图片精选