java利用@interface定義元註解及使用例項
阿新 • • 發佈:2019-01-30
專案中遇到一個日誌記錄功能,記錄登入系統使用者的行為日誌(對訂單進行驗單,發貨,退款等操作)。使用了攔截器及註解的形式,來完成日誌記錄。
參考網路資源,寫一個簡單的demo,對java元註解知識進行一個梳理
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、執行測試類,輸出測試情況