反射机制是java语言中一个非常重要的特性,他允许程序在运行时进行自我检查,同时也允许对其内部的成员进行操作。主要功能如下:得到一个对象所属的类;获取一个类的所有成员变量与方法;在运行时创建对象;在运行时调用对象的方法。反射机制一个非常重要的作用是可以在运行时动态的创建类的对象。首先用 Class.forName(完整类名)获得一个Class对象clazz,然后调用Class对象clazz的newInstance()方法得到一个对象。
在反射机制中国,class是一个非常重要的类,有3中方法可以获取class:
1) Class.ForName(“类的路径”)
2) 类名.Class
3) 实例.getClass()
我的项目中,dao层里面的工厂类用了Class.ForName(“类的路径”)和配置文件来加载产品类,解耦,以后想要换一个产品类,比如,不想用mysql数据库,改用oracle。直接重新写一个产品类,然后在配置文件里面改value。
实现步骤:
1、首先创建一个类包含一个私有属性
public class PrivateTest { private String name = "hello"; public String getName() { return name; } }
2、通过反射机制修改name的值
import java.lang.reflect.Field; public class ReflectionTest { public static void main(String[] args) throws Exception { PrivateTest pt = new PrivateTest(); Class<?> clazz = PrivateTest.class; // 获得指定类的属性 Field field = clazz.getDeclaredField("name"); // 值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。 field.setAccessible(true); // 更改私有属性的值 field.set(pt, "world"); System.out.println(pt.getName()); } }