一、注解概念
注解概念:java提供了一种源程序中的元素关联任何信息和任何元数据的一种途径和方法
二、java常见注解
1、@Override:重写父类的该函数。 2、@Deprecated: 表示该函数已过时。前两个都是有在父类,下面用在子类 3、@SuppressWarning:忽略某某警告三、常见第三方注解 Spring: @Autowired @Service @Repository 1、@Autowired:
可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作 用法: public class UserManagerImpl implements UserManager { @Autowired @Target({ElmentType.METHOD,ElementType.Type}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @ interface Description{ String desc(); String author(); int age() default18; } private UserDao userDao; } 2、@Service:定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),就相当于讲这个类定义为一个bean,bean名称为XXX。而无需去xml文件内去配置。
四、注解分类按照运行机制分 :1、源码注解 :只存在于源码中,在.class文件中没有2、编译时注解 :源码和.class文件中均存在 如:@override @deprecated等jdk自带的注解3、运行时注解:运行阶段仍然会起作用,甚至影响运行逻辑,如:spring的autowired四、自定义注解自定义注解语法要求 • 使用关键字@interface定义注解 如:public @interface AnnotationDemo { } • 成员以无参无异常的方式声明,可以用default为成员指定的一个默认值 • 成员类型是受限的,只能是原始类型及String, Class, Annotation, Enumeration • 如果注解只有一个成员,则成员名必须为value(),在使用时可以忽略成员名和赋值号(=) • 标识注解:没有成员的注解 • 元注解: @Target:注解的作用域(使用枚举类型ElementType的成员进行标识,可同时指定多个) § ElementType包括:TYPE(类或接口), FIELD(字段), METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE, TYPE_PARAMETER, TYPE_USE @Retention:生命周期(使用枚举类型RetentionPolicy的成员进行标识) § RetentionPolicy包括:SOURCE, CLASS, RUNTIME @Inherited:允许子注解继承 @Documented:生成javadoc文档时会包含注解```代码@Target({ElmentType.METHOD,ElementType.Type}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @ interface Description{ String desc(); String author(); int age() default18; }```五、注解应用实战1、使用注解的语法: @<注解名>(<成员名1>=<成员值1>,<成员名2>=<成员值2>,...) @Description(desc ="I am eyeColor",author="C boy",age=18) public String eyeColor(){ return "red"; }2、解析注解• 使用类加载器加载类(Class.forName) • 获取类上的注解(可以先判断注解是否存在) public boolean isAnnotationPresent(Class<? extends Annotation> paramClass) • 拿到注解实例 public <A extends Annotation> A getAnnotation(Class<A> paramClass) 使用实例获取成员的值(如d.value()) • 获取方法上的注解 通过反射拿到类上的所有方法,返回Method数组 § public Method[] getMethods() 遍历Method数组取得方法上的注解(可以先判断注解是否存在) § public boolean isAnnotationPresent(Class<? extends Annotation> paramClass) 拿到方法上注解的实例 § public <A extends Annotation> A getAnnotation(Class<A> paramClass) 使用实例获取成员的值(如d.value()) • *获取方法上注解也可以使用getAnnotations获取Method数组中的全部注解 public Annotation[] getAnnotations()
实战例子参考:《Java注解(Annotation)详解(四)——注解反射生成SQL语句》
http://blog.youkuaiyun.com/zen99t/article/details/50351575