1 /** 2 * Copyright By Grandsoft Company Limited. 3 * 2012-2-27 下午04:06:06 4 */ 5 package gboat2.base.core.annotation; 6 7 import java.lang.annotation.ElementType; 8 import java.lang.annotation.Inherited; 9 import java.lang.annotation.Retention; 10 import java.lang.annotation.RetentionPolicy; 11 import java.lang.annotation.Target; 12 13 /** 14 * <pre> 15 * 模块操作注解。 16 * 含义:当配置一个该注解,表示为模块定义了一个操作,同时注解对应的action method纳入访问权限控制,用户需要配置权限才能访问。 17 * 注解规则: 18 * 1、一个方法可以有多个注解,表示为其定义多个操作。 19 * 2、在方法上的注解与在类上在注解有重复时,以方法上的注解为准。 20 * 3、无论注解在类或方法上,只有注解上同时指定invokeAction,invokeMethod时,才进行跨action控制,只指定其中之一不能实现跨action。 21 * eg: @Operation(name="xname",code="xcode",invokeAction="xaction",invokeMethod="xmethod") 22 * public class PreferenceAction extends BaseActionSupport {... } 受控方法为xaction类的xmethod 23 * 24 * @Operation(name="xname",code="xcode",invokeAction="xaction",invokeMethod="xmethod") 25 * public void prefech(){...} 受控方法为xaction类的xmethod 及注解所在类的prefech方法 (即此种情况有两个方法受控) 26 * 27 * 4、如果注解在方法上,且未指定invokeAction,则invokeMethod的值被忽略,真正的受控方法是该注解所在的方法。 28 * eg: @Operation(name="xx",code="xx",invokeMethod="xx") 29 * public void prefech(){...} 受控方法为prefech 30 * 31 * 5、如果注解在方法上,且未指定invokeMethod,则invokeAction的值被忽略,真正受控的方法是该注解所在的方法。 32 * eg: @Operation(name="xx",code="xx",invokeAction="xx") 33 * public void prefech(){...} 受控方法为prefech 34 * 35 * 6、如果注解在方法上,invokeMethod与invokeAction都未指定,真正受控的方法是该注解所在的方法。 36 * eg: @Operation(name="xx",code="xx") 37 * public void prefech(){...} 受控方法为prefech 38 * 39 * 7、如果注解在类上,invokeMethod与invokeAction都未指定,真正受控的方法是code指向的方法。 40 * eg: @Operation(name="xname",code="xcode") 41 * public class PreferenceAction extends BaseActionSupport {... } 受控方法PreferenceAction为xcode 42 * 43 * 8、如果注解在类上,且未指定invokeMethod,则invokeAction的值被忽略,真正受控的方法是code指向的方法。 44 * eg: @Operation(name="xname",code="xcode",invokeAction="xaction") 45 * public class PreferenceAction extends BaseActionSupport {... } 受控方法为PreferenceAction的xcode 46 * 47 * 9、如果注解在类上,指定了invokeMethod,但未指定invokeAction,真正受控的方法是invokeMethod指向的方法。 48 * eg: @Operation(name="xname",code="xcode",invokeMethod="xmethod") 49 * public class PreferenceAction extends BaseActionSupport {... } 受控方法为PreferenceAction的xmethod 50 * 51 * 特殊情况:在类上的注解,如果code或invokeMethod共同计算出的受控方法理论值为add、delete,则真正的受控方法分别为edit,delete或ajaxDelete。 52 * </pre> 53 * @author lysming 54 * @author tanxw 55 * @since 3.0 56 * @date 2012-2-27 57 * @see Operations 58 */ 59 @Inherited 60 @Retention(RetentionPolicy.RUNTIME) 61 @Target( { ElementType.METHOD, ElementType.TYPE }) 62 public @interface Operation { 63 64 /** 65 * 操作名称,如“新增xx”,“编辑xx”等 66 */ 67 public String name(); 68 69 /** 70 * 操作编码,在同一个action的所有注解中,code必须是唯一的 71 */ 72 public String code(); 73 74 /** 75 * 若受控的方法是跨action的,则需指定相应的action 76 */ 77 public String invokeAction() default ""; 78 79 /** 80 * 受控的方法 81 */ 82 public String invokeMethod() default ""; 83 84 /** 85 * 描述。主要供人而非机器阅读,无特殊需要,无需配置。 86 */ 87 public String desc() default ""; 88 }