項目地址:https://github.com/gongxianshengjiadexiaohuihui/noobspring
我們知道spring使用了大量的註解,首先我們需要了解註解是用來幹嘛的,這裏我講一下個人的理解和看法。
在我看來註解的作用主要是用來標記,這個標記可以被保留到不同的時期,這個後面會有敘述,然後呢我們可以在不同的時期,獲取到這個標記,然後我們就可以根據這個標記的內容,來對被標記的對象進行相應的處理。就比如一臺macbook,我對它使用 @筆記本電腦 這個註解,我就可以在某個時期獲取臺macbook,通過它的註解,我知道它是一臺筆記本電腦,我就可以用它來編程,看電影,玩遊戲等等
這是我們需要實現的自定義註解,一共有兩類,一類是和mvc相關的,一類是和aop相關的,我都加了前綴NB是項目名的縮寫,也避免和原有的註解衝突
我們先看aop
四個通知,前置通知@NBBefore 後置通知 @NBAfter 異常通知@NBAfterThrowing 返回通知 @NBAfterReturn
切點 @NBPointcut
切面 @NBAspect
再看mvc
@NBAutowired 注入
@NBComponent 生成bean實例保存到ioc容器中
@NBRequestMapping 值爲請求路徑,和方法作爲鍵值對被存放在handlerMapping中
@NBController 控制層 作爲方法反射的類實例(進行方法的反射調用時,需要方法所在的類實例作爲參數)
@NBRequestParam 請求參數 把請求參數的值作爲需要調用的方法參數
關於自定義註解的內容,我們取一個來舉例
package com.ggp.framework.annotation.mvc;
import java.lang.annotation.*;
/**
* @Author:ggp
* @Date:2019/1/21 16 04
* @Description:
*/
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface NBRequestMapping {
String value() default "";
}
首先是@Target 是聲明這個註解的作用範圍,裏面的內容是一個枚舉對象,
ElementType.TYPE 作用範圍 類、接口、枚舉、註解
ElementType.METHOD 作用範圍 方法
ElementType.FIELD 作用範圍 字段、枚舉的常量
ElementType.PARAMETER 作用範圍 方法的參數
ElementType.CONSTRUCTOR 作用範圍 構造函數
ElementType.LOCAL_VARIABLE 作用範圍 局部變量
ElementType.ANNOTATION_TYPE 作用範圍 註解
ElementType.PACKAGE 作用範圍 包
註解的保留政策 @Retention
Retention.SOURCE 註解僅存在於源碼,在class字節碼文件中不包含
Retention.CLASS 默認的保留政策,註解會在class字節碼中存在,但是運行時無法獲得
Retention.RUNTIME 註解會在class字節碼中存在,在運行時可以通過反射獲得
註解包含在javadoc中:@Document
註解可以被繼承: @Inherited