这个java中注解的使用到底是什么意思呢?我开始以为是一种拦截器,可以对数据进行再次处理,然后继续执行。但是,在看了多篇文章后,发现并非如此,我错误的把注解理解成了代理模式(使用了反射机制),注解和代理其实都使用了反射机制。但是思想是不同的,动态代理使用的反射是为了获取运行时某参数,然后就像拦截处理。而注解也使用了反射,他的目的是为了 在属性上起一个别名,在运行时,通过这个别名获取这个参数(数据库处理和findviewid的处理)
例如:我们先创建一个自定义注解:
/** * Created by malei on 2018/4/25. */ @Target({ElementType.TYPE,ElementType.METHOD}) //作用于类、接口、枚举,但不能是注解 ; 作用于方法、不能是构造方法 @Retention(RetentionPolicy.RUNTIME) // 在运行时可以通过反射获取到,JVM会读取注解,同时保存在class文件中 public @interface MyAnnotation { String name() default ""; int age() default 18; }然后在运行时,我们就可以获取我们写注解的时候,写入的name和age了
Class<UserInfo> clazz = UserInfo.class; Method[] methds = clazz.getDeclaredMethods(); //获取所有的方法 for (Method method :methds){ //判断该方法是否存在指定注解 if(method.isAnnotationPresent(MyAnnotation.class)){ //返回当前方法上的注解对象 MyAnnotation reqMapping = method.getAnnotation(MyAnnotation.class); //获得注解的值 System.out.println("方法注解值:"+reqMapping.name()); } }