zoukankan      html  css  js  c++  java
  • 注解的继承

    背景:当自定义注解遇到spring和类增强

    注解的继承有些复杂,应尽量避免使用

    当自定义注解遇到spring和类增强 第1点有改写方法遗失注解案例

    public class TestMain {
    public static void main(String []f) {

    /**
    * 结论
    * 1 getMethods,getFields只能取到父类public
    * 2 修饰类,要加@Inherited,常用于隐式的aop(cglib)
    * 3 修饰public field,无论是否加@Inherited,都取得到
    * 4 修饰public method override,无论是否加@Inherited,都取不到
    * 5 修饰public method non override,无论是否加@Inherited,都取得到
    * 6 修饰接口,无论是否加@Inherited,都取不到
    */

    // 类
    System.out.println(ByAnoCExtend.class.isAnnotationPresent(IJichen.class));
    System.out.println(ByAnoCExtend.class.isAnnotationPresent(INonJichen.class));

    // 成员
    Field [] fields = ByAnoCExtend.class.getFields();
    for(Field field : fields) {
    field.setAccessible(true);

    System.out.println(field.getName() + field.isAnnotationPresent(IJichen.class));
    System.out.println(field.getName() + field.isAnnotationPresent(INonJichen.class));
    }

    // 方法
    Method [] methods = ByAnoCExtend.class.getMethods();
    for(Method method : methods) {
    System.out.println(method.getName() + method.isAnnotationPresent(IJichen.class));
    System.out.println(method.getName() + method.isAnnotationPresent(INonJichen.class));
    }

    // 接口
    System.out.println(ByAnoIExtend.class.isAnnotationPresent(IJichen.class));
    System.out.println(ByAnoIExtend.class.isAnnotationPresent(INonJichen.class));

    }
    }

    像spring或guice使用cglib代理构建ioc的情况,需注意加到原始类的注解需要有@Inherit,运行期通过getBean().getClass().getAnnotation才能获得cglib代理生成的子类的注解

  • 相关阅读:
    Mysql 主主复制失败恢复【转】
    linux的curl用法【转】
    做Mysql主从时,注意使用replicate_wild_do_table和replicate-wild-ignore-table【转】
    MyEclipse 2014配置Maven
    使用MyEclipse 2014构建Maven项目的两种方法
    Struts2的输入校验
    Java Web之Filter
    Struts2国际化
    Struts2实现登录流程
    Java实现文件MD5加密
  • 原文地址:https://www.cnblogs.com/silyvin/p/13415913.html
Copyright © 2011-2022 走看看