java註解基礎知識

1、概述
註解有點像接口(annotation 有點像 interface)
2、創建註解

package com.eimageglobal.common.biz.annotation;

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 *  註解有點像是接口
 * @author chenyufeng
 *
 */
@Retention(RUNTIME)
@Target(METHOD)
public @interface UseCase {
	//註解元素可以是基本類型、String、Class、enum、Annotation
	//及以上類型的數組
	public int id() ;
	public String description() default "no description";
	
	public String[] versions() ;
}

2、註解的使用:在類、方法、屬性等地方進行標註

package com.eimageglobal.common.biz.util;

import com.eimageglobal.common.biz.annotation.UseCase;

public class PasswordUtils {
	//如何使用?
	//小括號裏面對註解元素進行賦值
	@UseCase(id=47,description="Password must contains at least ome numeric",versions= {"1.0","3.0"})
	public boolean validatePassword(String password) {
		return password.matches("\\w*\\d\\w*");
	}
	
	//方法有default實現的可以不用賦值,會使用默認值
	//如果是註解元素類型是數組,也可以直接用一個值,編譯器會幫你轉化爲長度爲1的數組
	@UseCase(id=48,versions="2.0")
	public String encryptPassword(String password) {
		return new StringBuilder(password).reverse().toString();
	}
}

3、註解處理器

package com.eimageglobal.common.biz.annotation.handler;

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

import com.eimageglobal.common.biz.annotation.UseCase;
import com.eimageglobal.common.biz.util.PasswordUtils;
/**
 * 註解處理類
 * @author chenyufeng
 *
 */
public class UseCaseHandler {
	public static void trackUseCases(List<Integer> useCases,Class<?> cl) {
		for (Method method : cl.getDeclaredMethods()) {
			UseCase useCase = method.getAnnotation(UseCase.class);
			if (useCase!=null) {
				System.out.println("Found User Case : " + useCase.id() + " versions:" +Arrays.toString(useCase.versions()));
				useCases.remove(new Integer(useCase.id()));
			}
		}
		for (Integer integer : useCases) {
			System.out.println("Warning : Missing use case-"+integer);
		}
	}
	
	
	public static void main(String[] args) {
		List<Integer> useCases = new ArrayList<Integer>();
		Collections.addAll(useCases, 47,48,49);
		trackUseCases(useCases, PasswordUtils.class);
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章