Java反射
Posted Just DO IT by luckygxf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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实例化对象,很多框架都用到了反射机制。很多博客说反射性能不好,这个需要在研究一下。
以上是关于Java反射的主要内容,如果未能解决你的问题,请参考以下文章
使用反射在外部JAR / CLASS上调用包含Hibernate事务的方法(Java EE)