• Java


    package testannotation;
    
    import  java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target({ElementType.FIELD,ElementType.CONSTRUCTOR,ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)//运行时
    public @interface MyAnnotation {
         String [] value();
    }
    
    package testannotation;
    
    public class Person {
            private String name;
            private Integer age;
            private String sex;
            @MyAnnotation({"杨晓航","20","男"})
            public Person(){}
    
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public Integer getAge() {
                return age;
            }
            public void setAge(Integer age) {
                this.age = age;
            }
            public String getSex() {
                return sex;
            }
            public void setSex(String sex) {
                this.sex = sex;
            }
    
    }
    
    public class User {
        private String username;
        private String password;
        private Float balance;
    
        @MyAnnotation({"杨晓航","123","10000"})
        public User(){}
    
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public Float getBalance() {
            return balance;
        }
        public void setBalance(Float balance) {
            this.balance = balance;
        }
    
    }
    
    package testannotation;
    import java.lang.annotation.Annotation;
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    
    public class MySpring {
    
        public Object getBean(String classname){
            Object obj = null;
            try {
                //1.先通过传递的类名获得对应的Class
                Class clazz = Class.forName(classname);
                //2.通过Class获取无参数的构造方法
                Constructor con = clazz.getConstructor();
                //3.构造方法创建一个对象
                obj = con.newInstance();
    
                //4.获取属性的值
                Annotation a = con.getAnnotation(MyAnnotation.class);
                //5.执行value方法
                Class clazz2 = a.getClass();
                Method method = clazz2.getMethod("value");
                String [] values = (String[]) method.invoke(a);
                //6.将values的值存入属性中
                //找寻属性对应的set方法赋值
                //获取传递的Class类全部的私有属性
                Field[] filelds = clazz.getDeclaredFields();
                for(int i = 0; i < filelds.length; i++){
                    //获取属性的名字
                    String fieldName = filelds[i].getName();
                    String firstName = fieldName.toUpperCase().substring(0,1);
                    String nextName = fieldName.substring(1);
                    StringBuilder stringBuilder = new StringBuilder("set");
                    stringBuilder.append(firstName);
                    stringBuilder.append(nextName);
                    //将值通过调用对应的set方法存入属性
                            //获取数据类型
                    Class fieldType = filelds[i].getType();
                    //方法名字,数据类型
                    Method setMethod = clazz.getMethod(stringBuilder.toString(),fieldType);
                    //需要将注解内读取到的String类型的值 转化成属性类型对应的值
                    setMethod.invoke(obj,fieldType.getConstructor(String.class).newInstance(values[i]));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return obj;
        }
    }
    
    package testannotation;
    
    public class TestMain {
        public static void main(String []args){
            MySpring ms = new MySpring();
            Person person = (Person) ms.getBean("testannotation.Person");
            System.out.println(person.getName()+"--"+person.getSex()+"--"+person.getAge());
            User user = (User) ms.getBean("testannotation.User");
            System.out.println(user.getBalance()+"--"+user.getPassword()+"--"+user.getUsername());
        }
    }
  • 相关阅读:
    vue-cli+webpack打包,上线
    vue2.0搭建vue手脚架(vue-cli)
    vue -- vue-cli webpack项目打包后自动压缩成zip文件
    Java字符串和常用类
    Java基础
    TF-IDF与TextRank的关键词提取算法应用
    ACl2019|使用Graph-to-Sequence模型为中文文章生成连贯的评论
    ACL2019|巧用文本语境信息:基于上下文感知的向量优化
    探索四川奥秘
    手机浏览器通过Scheme跳转APP,兼容各种手机浏览器
  • 原文地址:https://www.cnblogs.com/yyanghang/p/11391541.html
Copyright © 2020-2023  润新知