View Javadoc
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: &#064;Operation(name="xname",code="xcode",invokeAction="xaction",invokeMethod="xmethod")
22   *    public class PreferenceAction extends BaseActionSupport {... } 受控方法为xaction类的xmethod
23   *    
24   *    &#064;Operation(name="xname",code="xcode",invokeAction="xaction",invokeMethod="xmethod")
25   *    public void prefech(){...} 受控方法为xaction类的xmethod 及注解所在类的prefech方法 (即此种情况有两个方法受控)
26   *    
27   * 4、如果注解在方法上,且未指定invokeAction,则invokeMethod的值被忽略,真正的受控方法是该注解所在的方法。
28   *    eg: &#064;Operation(name="xx",code="xx",invokeMethod="xx")
29   *    public void prefech(){...} 受控方法为prefech
30   *    
31   * 5、如果注解在方法上,且未指定invokeMethod,则invokeAction的值被忽略,真正受控的方法是该注解所在的方法。
32   *    eg: &#064;Operation(name="xx",code="xx",invokeAction="xx")
33   *    public void prefech(){...} 受控方法为prefech
34   *    
35   * 6、如果注解在方法上,invokeMethod与invokeAction都未指定,真正受控的方法是该注解所在的方法。
36   *    eg: &#064;Operation(name="xx",code="xx")
37   *    public void prefech(){...} 受控方法为prefech
38   *    
39   * 7、如果注解在类上,invokeMethod与invokeAction都未指定,真正受控的方法是code指向的方法。
40   *    eg: &#064;Operation(name="xname",code="xcode")
41   *    public class PreferenceAction extends BaseActionSupport {... } 受控方法PreferenceAction为xcode
42   *    
43   * 8、如果注解在类上,且未指定invokeMethod,则invokeAction的值被忽略,真正受控的方法是code指向的方法。
44   *    eg: &#064;Operation(name="xname",code="xcode",invokeAction="xaction")
45   *    public class PreferenceAction extends BaseActionSupport {... } 受控方法为PreferenceAction的xcode
46   *    
47   * 9、如果注解在类上,指定了invokeMethod,但未指定invokeAction,真正受控的方法是invokeMethod指向的方法。
48   *    eg: &#064;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  }