• Java反射


    Java反射可以在程序运行时,生成对象,修改对象。JDK提供了Class, Constructor, Method等对象实现反射。

    在spring框架中,使用ioc,面向接口编程。这个时候,我们申明对象是一个接口类型,具体实现是什么类型,可以通过配置文件指定。这个时候编译程序是不知道具体类型是什么的,需要spring ioc容器去实例化具体的对象。这里在配置文件配置了如<bean id= "XXX" class= "xxx.xxx.xx"/>这个时候就可以通过反射获取对象的实例。

    下面是一个反射demo,通过xxx.xxx.xx实例化对象。spring实例化了对象可以把对象注入到容器中,如map中

    Person.java

    import com.alibaba.fastjson.JSON;
    
    public class Person {
        private String name;
        private Integer age;
    
        public Person() {
    
        }
    
        public Person(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
    
        @Override
        public String toString(){
            return JSON.toJSONString(this);
        }
    }

    测试demo

    public static void main(String[] args) throws Exception {
            testInstance();
        }
    
    
        private static void testInstance() throws Exception {
            String classPackage = "com.gxf.reflect.Person";
            Class clazz = Class.forName(classPackage);
            Class[] params = {String.class, Integer.class};
            Object[] values = {"guanxiangfei", 28};
            Constructor constructor = clazz.getConstructor(params);
            Person guanxiangfei = (Person) constructor.newInstance(values);
            System.out.println(guanxiangfei);
    
        }

    输出

    {"age":28,"name":"guanxiangfei"}
    
    Process finished with exit code 0

    通过xx.xx.xx实例化对象,很多框架都用到了反射机制。很多博客说反射性能不好,这个需要在研究一下。

  • 相关阅读:
    Codeforces1420E. Battle Lemmings 题解 动态规划
    C++使用partial_sum求前缀和
    HDU6171 Admiral 题解 折半搜索
    HDU3017 Treasure Division 题解 折半搜索
    使用re.split 按标点+空格的一种分割办法
    实现CString的Format功能,支持跨平台
    转载一篇makefile,说的很详细
    Microsoft C++ 异常: std::system_error std::thread
    源码一样,运行结果不一致的解决办法
    记录一次阿里的电话面试
  • 原文地址:https://www.cnblogs.com/luckygxf/p/8971637.html
Copyright © 2020-2023  润新知