二十一、自定义注解实例
来源:互联网 发布: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有全部权限的如下图
- 二十一、自定义注解实例
- Java注解-自定义注解实例
- java自定义注解实例
- java自定义注解实例
- 自定义注解实例
- java自定义注解实例
- 自定义Java注解实例
- 自定义注解简单实例
- Java注解二 自定义注解
- 自定义注解(二)
- java注解介绍和自定义注解实例
- java 自定义注解应用实例
- 使用自定义注解实例2
- 自定义注解和反射实例
- 基于自定义注解annotation 实例
- java 自定义注解的实例
- 注解二之Java自定义注解
- Annotation注解APT(二):自定义注解
- Notes On <Pro JavaScript with MooTools> - 02
- How to install Aptana Studio 3 on Ubuntu 12.04 LTS (Precise Pangolin)
- hibernate的继承的映射关系的例子
- 提高PHP编程效率 引入缓存机制提升性能
- OpenGL之抗锯齿 以及 线宽的设置
- 二十一、自定义注解实例
- Oracle 常用SQL系统查询语句
- 用微博控制你的电脑
- POJ 2449 A*+spfa
- matlab
- Qt学习之路(41): QTableWidget
- ARM的堆栈学习笔记
- Android -- 网络管理分析
- java new Date 获取时间 与系统不一致