二十一、自定义注解实例

来源:互联网 发布:c语言小游戏代码txt 编辑:程序博客网 时间:2024/06/10 12:00

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

 

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

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



 

原创粉丝点击