zoukankan      html  css  js  c++  java
  • Java反射+注解案例

    注解类代码,注解的属性可以有多个:

    package reflect;
    
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    
    /***
     * java注解默认只会保留在字节码文件里面
     * 运行期间注解会被抹掉
     * 可以用@Retention来指定注解的保留时间
     * 注:
     *     @Retention是元注解,即用来解释其他注解的注解
     *     Retentionpolicy.RUNTIME是表示注解保留到运行时。
     * @author zlq1252
     *
     */
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Test {
        /*
         * 注解的属性
        *
       *注解可以有多个属性。
       *如果属性名为value时,可以不制定属性名(只有一个属性时)
    */ public String value(); }

    方法类,在方法类的方法上加上注解代码如下:

    package reflect;
    
    public class C {
        
        public void f1() {
            // TODO Auto-generated method stub
            System.out.println("C'S f1");
        }
        @Test(value="淡淡")
        public void hello() {
            // TODO Auto-generated method stub
            System.out.println("C'S hello");
        }
        @Test(value="洋洋")
        public void bala() {
            // TODO Auto-generated method stub
            System.out.println("C'S bala");
        }
    }

    反射类代码,通过反射类获得所有具有代码注解的方法并执行,同时可以过的注解的属性:

    package reflect;
    
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.Scanner;
    
    public class TestCase3 {
    
        public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
            // TODO Auto-generated method stub
            Scanner sc = new Scanner(System.in);
            String className = sc.nextLine();
            Class clazz = Class.forName(className);
            Object obj = clazz.newInstance();
            Method[] methods = clazz.getDeclaredMethods();
            for(Method mh:methods){
                //获得加在方法前面的@Test
                Test test = mh.getDeclaredAnnotation(Test.class);
                System.out.println("@Test:"+test);
                //执行带有注解的方法
                if(test!=null){
                    mh.invoke(obj);
                    //读取@Test的属性值
                    String v1 = test.value();
                    System.out.println("@Test的属性值:"+v1);
                }
            }
        }
    
    }
  • 相关阅读:
    008-解决sublime text3安装Package Control问题
    156-a++与++a区别?
    155-类型转换的六条规则是什么?
    040-springboot工程无法逆向工程生成?
    153-如何搭建springboot框架?
    【根据生日获取年龄】
    富文本 保存转义StringEscapeUtils.unescapeHtml4(
    git ,报403错误,完美解决方案
    idea创建Maven项目后启动报404
    IntelliJ IDEA2016.1 + maven 创建java web 项目[转]
  • 原文地址:https://www.cnblogs.com/topzhao/p/10266535.html
Copyright © 2011-2022 走看看