1. 程式人生 > >java利用@interface定義元註解及使用例項

java利用@interface定義元註解及使用例項

專案中遇到一個日誌記錄功能,記錄登入系統使用者的行為日誌(對訂單進行驗單,發貨,退款等操作)。使用了攔截器及註解的形式,來完成日誌記錄。
參考網路資源,寫一個簡單的demo,對java元註解知識進行一個梳理
demo資源目錄結構如下:
demo資源目錄介面預覽
1、利用@interface定義日誌記錄註解

package com.sunny.core.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import
java.lang.annotation.Target; /** * Created by Administrator on 2017/3/16. */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface LogRecord { public String id(); public String description() default "no description"; }

2、新建密碼工具類,使用日誌記錄註解
package com.sunny.core.annotation;

import org.apache.poi.ss.formula.functions.T;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
*
* Created by Administrator on 2017/3/16.
*/
public class PasswordUtil {

/**
 * 密碼校驗
 * @param password
 * @return
 */
@LogRecord(id="47",description = "Passwords must contain at least one numeric")
public boolean validatePassword(String password){
    return (password.matches("\\w*\\d\\w*"));
}

/**
 * 對字串序列進行反轉加密
 * @param password
 * @return
 */
@LogRecord(id="48")
public String encryptPassword(String password){
    return  new StringBuilder(password).reverse().toString();
}

}

3、新建測試類
package com.sunny.core.annotation;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
* Created by Administrator on 2017/3/16.
*/
public class PasswordUtilTest {

public static void main(String[] args) {
    List<Integer> logIds=new ArrayList<Integer>();
    Collections.addAll(logIds, 47, 48, 49, 50);
    trackLogRecord(logIds,PasswordUtil.class);
}

/**
 * 追蹤日誌記錄
 */
public static void  trackLogRecord(List<Integer> logIds,Class<?> cl){
    for (Method method:cl.getDeclaredMethods()) {
        LogRecord logRecord = method.getAnnotation(LogRecord.class);
        if(logRecord!=null){
            System.out.println("Found LogRecord:"+logRecord.id()+" "+logRecord.description());
            logIds.remove(new Integer(logRecord.id()));
        }
    }
    for(int logId:logIds){
        System.out.println("Warning:Missing LogRecord ,Id:"+logId);
    }
}

}

4、執行測試類,輸出測試情況
這裡寫圖片描述