|  | 
 
| 
 | java注解使用的几个小技巧: 
 最近常常用到注解,总结了几个注解使用的小技巧,现收拾整顿如下:
 
 一、使用默认的注解参数:
 
 使用default枢纽字可以指定注解的默认参数:
 
 import java.lang.annotation.ElementType;
 
 import java.lang.annotation.Retention;
 
 import java.lang.annotation.RetentionPolicy;
 
 import java.lang.annotation.Target;
 
 @Target(ElementType.METHOD)
 
 @Retention(RetentionPolicy.RUNTIME)
 
 public @interface SQL {
 
 String sql() default "";
 
 }
 假如我们在使用注解@SQL的时候没有显式的去指定sql参数,那么就默认采取default枢纽字所指定的值
 
 二、用value指定默认值
 
 我们常常看到良多注解是这种形式,例如
  SQL("select email from user") 
 这个注解里面的参数为什么没有带名称呢?实在它的注解是这样定义的:
 
 import java.lang.annotation.ElementType;
 
 import java.lang.annotation.Retention;
 
 import java.lang.annotation.RetentionPolicy;
 
 import java.lang.annotation.Target;
 
 @Target(ElementType.METHOD)
 
 @Retention(RetentionPolicy.RUNTIME)
 
 public @interface SQL {
 
 String value() default "";
 
 }
 
 三、在注解中使用数组参数
 
 假如你用过Struts2的注解来配置Action,那么你会看到如下形式的注解:
 
 @Results({
 
 @Result(name="success",value=xxx
 
 .jsp",type=org.apache.struts2.dispatcher.ServletRedirectResult.class),
 
 @Result(name="input",value="/xxx
 
 .jsp",type=org.apache.struts2.dispatcher.ServletRedirectResult.class)
 
 })
 怎么来创建这种注解呢?
 
 实在可以把@Results的参数看作是一个@Result的数组
 
 定义如下:
 
 import java.lang.annotation.ElementType;
 
 import java.lang.annotation.Retention;
 
 import java.lang.annotation.RetentionPolicy;
 
 import java.lang.annotation.Target;
 
 @Target(ElementType.METHOD)
 
 @Retention(RetentionPolicy.RUNTIME)
 
 public @interface Result {
 
 }
 
 import java.lang.annotation.ElementType;
 
 import java.lang.annotation.Retention;
 
 import java.lang.annotation.RetentionPolicy;
 
 import java.lang.annotation.Target;
 
 @Target(ElementType.METHOD)
 
 @Retention(RetentionPolicy.RUNTIME)
 
 public @interface Results {
 
 Result[] value();   //没什么特别的,只是接受了一个数组参数而已
 
 }
 四、让注解可以去润饰多个Target类型
 
 我么使用@Target注解来指定某个注解可以润饰的类型,实际上,同上面一样,@Target接受的是一个数组参数,利用这一特性我们可以让注解来润饰多个类型。
 
 import java.lang.annotation.ElementType;
 
 import java.lang.annotation.Retention;
 
 import java.lang.annotation.RetentionPolicy;
 
 import java.lang.annotation.Target;
 
 @Target({ElementType.PARAMETER,ElementType.FIELD})
 
 @Retention(RetentionPolicy.RUNTIME)
 
 public @interface Param {
 
 }
 | 
 | 
 |