這一章先把支持注解的功能加上,這樣就不需要經常地修改配置文件了。
至于視圖處理的地方,就還是先用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) | 包 |
新聞熱點
疑難解答
圖片精選