這一章先把支持注解的功能加上,這樣就不需要經(jīng)常地修改配置文件了。
至于視圖處理的地方,就還是先用json吧,找時(shí)間再寫(xiě)。
項(xiàng)目地址在:https://github.com/hjx601496320/aMvc 。
測(cè)試代碼在:https://github.com/hjx601496320/amvc-test 。
怎么寫(xiě)呢?
因?yàn)樵谥皩?xiě)代碼的時(shí)候,我把每個(gè)類要做的事情分的比較清楚,所以在添加這個(gè)功能的時(shí)候?qū)懫饋?lái)還是比較簡(jiǎn)單的,需要修改的地方也比較小。
這一章里我們需要干的事情有:
定義一個(gè)注解,標(biāo)識(shí)某一個(gè)class中的被添加注解的方法是一個(gè)UrlMethodMapping。 修改配置文件,添加需要掃描的package。 寫(xiě)一個(gè)方法,根據(jù)package中值找到其中所有的class。 在UrlMethodMapping的工廠類UrlMethodMappingFactory中新加一個(gè)根據(jù)注解創(chuàng)建UrlMethodMapping的方法。 在Application中的init()方法中,根據(jù)是否開(kāi)啟注解支持,執(zhí)行新的工廠類方法。 完了。多么簡(jiǎn)單呀~~~
現(xiàn)在開(kāi)始寫(xiě)
定義一個(gè)注解Request
關(guān)于怎樣自定義注這件事,大家可以上網(wǎng)搜一下,比較簡(jiǎn)單。我這里只是簡(jiǎn)單的說(shuō)一下。我先把代碼貼出來(lái):
import com.hebaibai.amvc.RequestType;import java.lang.annotation.*;/** * 表示這個(gè)類中的,添加了@Request注解的method被映射為一個(gè)http地址。 * * @author hjx */@Documented@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface Request { /** * 請(qǐng)求類型 * 支持GET,POST,DELETE,PUT * * @return */ RequestType[] type() default {RequestType.GET, RequestType.POST, RequestType.DELETE, RequestType.PUT}; /** * 請(qǐng)求地址 * 添加在class上時(shí),會(huì)將value中的值添加在其他方法上的@Request.value()的值前,作為基礎(chǔ)地址。 * * @return */ String value() default "/";}
定義一個(gè)注解,需要用到一下幾個(gè)東西:
1:@interface:說(shuō)明這個(gè)類是一個(gè)注解。
2:@Retention:注解的保留策略,有這么幾個(gè)取值范圍:
代碼 | 說(shuō)明 |
---|---|
@Retention(RetentionPolicy.SOURCE) | 注解僅存在于源碼中 |
@Retention(RetentionPolicy.CLASS) | 注解會(huì)在class字節(jié)碼文件中存在 |
@Retention(RetentionPolicy.RUNTIME) | 注解會(huì)在class字節(jié)碼文件中存在,運(yùn)行時(shí)可以通過(guò)反射獲取到 |
因?yàn)槲覀冊(cè)诔绦蛑行枰〉阶远x的注解,所以使用:RetentionPolicy.RUNTIME。
3:@Target:作用目標(biāo),表示注解可以添加在什么地方,取值范圍有:
代碼 | 說(shuō)明 |
---|---|
@Target(ElementType.TYPE) | 接口、類、枚舉、注解 |
@Target(ElementType.FIELD) | 字段、枚舉的常量 |
@Target(ElementType.METHOD) | 方法 |
@Target(ElementType.PARAMETER) | 方法參數(shù) |
@Target(ElementType.CONSTRUCTOR) | 構(gòu)造函數(shù) |
@Target(ElementType.LOCAL_VARIABLE) | 局部變量 |
@Target(ElementType.ANNOTATION_TYPE) | 注解 |
@Target(ElementType.PACKAGE) | 包 |
新聞熱點(diǎn)
疑難解答
圖片精選