二十一、自定义注解实例

示例:用自定义注解实现对权限的控制。如果只有读权限就只可见页面上查询部分,如果有写权限或全部权限就不但能操作查询部分还能操作修改部分。(查询部分和修改部分用文字代替,但只要在页面可见就表示可以操作)

 

首先是定义注解类和使用这个自定义注解的类:

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有全部权限的如下图



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值