二十一、自定義註解實例

示例:用自定義註解實現對權限的控制。如果只有讀權限就只可見頁面上查詢部分,如果有寫權限或全部權限就不但能操作查詢部分還能操作修改部分。(查詢部分和修改部分用文字代替,但只要在頁面可見就表示可以操作)

 

首先是定義註解類和使用這個自定義註解的類:

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


@Retention(RetentionPolicy.RUNTIME)  
@Target(ElementType.METHOD) 

public @interface LevelAnnotation {
	public enum AuthLevel{read,write,all}  
	public AuthLevel getAuthLevel() default AuthLevel.read;
	public String memberName() default "";
}

 

import com.taobao.member.web.module.screen.prop.LevelAnnotation.AuthLevel;


public class MemberInfo {
	@LevelAnnotation(memberName="")
//使用註解的參數memberName如果爲空,就會執行下面用隨機數形成權限等級的部分;如果由@LevelAnnotation(memberName="")改成@LevelAnnotation(memberName="zirou"),即memberName爲"zirou"就賦給全部權限,只會出現(頁面三)
	public AuthLevel getMemberLevel(String memberName) {
		AuthLevel level = null;
		if("zirou".equals(memberName)){
			level = AuthLevel.all;
		}else{
			int i = 1+(int)(Math.random()*3);
			if(i==1){
				level = AuthLevel.read;
			}else if(i==2){
				level = AuthLevel.write;
			}else if(i==3){
				level = AuthLevel.all;
			}
		}
		return level;
	}
}

 

然後是這個自定義註解的處理類:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.taobao.member.web.module.screen.prop.LevelAnnotation.AuthLevel;

public class AnnotationParse {  

    public AuthLevel parseMethod(Class clazz) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException, InstantiationException{  
 	   Object obj = clazz.getConstructor(new Class[]{}).newInstance(new Object[]{});  
 	   for(Method method : clazz.getDeclaredMethods()){  
 		  LevelAnnotation levelAnnotation = method.getAnnotation(LevelAnnotation.class);  
 	      if(levelAnnotation != null){  
 	    	  AuthLevel level = (AuthLevel) method.invoke(obj, levelAnnotation.memberName()); 
 		      return level;
 	      }  
 	   }
 	   return null;  
    }
}


展現效果最直接的方式就是用頁面展現了,眼見爲實嘛:

public class Screen {
	
    public void execute(Context context) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, InstantiationException {
		AnnotationParse annotationParse = new AnnotationParse();
		AuthLevel auth = annotationParse.parseMethod(MemberInfo.class);
		if(auth.equals(AuthLevel.read)){
			context.put("memberLevel", Integer.toString(1));
		}else if(auth.equals(AuthLevel.write)){
			context.put("memberLevel", Integer.toString(2));
		}else if(auth.equals(AuthLevel.all)){
			context.put("memberLevel", Integer.toString(3));
		}
    }
}


 

<form action="" method="post" enctype="multipart/form-data">

<table width="100%" align="center" border="1" cellpadding="12" cellspacing="0" bgcolor="white">
	memberLevel=$memberLevel
	<br/>
	---------------------------------------------
	#if("$memberLevel"=="1"||"$memberLevel"=="2"||"$memberLevel"=="3")
	<div class="bd">
		<h2>查詢部分</h2>
	</div>
	---------------------------------------------
	#end
	#if("$memberLevel"=="2"||"$memberLevel"=="3")
	<div class="bd">
		<h2>修改部分</h2>
	</div>
	#end
</table>

</form>

 

頁面效果是這樣滴:

(頁面一)等級是1只有讀權限的如下圖

 

 

(頁面二)等級是2有讀、寫權限的如下圖

 

 

(頁面三)等級是3有全部權限的如下圖



 

發佈了42 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章