首页 > 扩展 > MVC > 正文

写简单的mvc框架实例讲解

2024-09-06 20:44:39
字体:
来源:转载
供稿:网友

这一章先把支持注解的功能加上,这样就不需要经常地修改配置文件了。

至于视图处理的地方,就还是先用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)
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表