什么是反射?
反射,是在程序的运行时期,对任意一个类文件对象,都能够调用它的方法和属性,改变属性值,这种动态获取信息,及动态调用方法的机制称为反射。
由原来的 new User().方法 ===> 变为Class.forName(“User”).方法
测试代码如下:
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class UserServiceTest {
@Test
public void test() throws Exception {
//获得User文件字节码对象
Class clazz = Class.forName("com.squ.eurekaserver.domain.User");
//引入 java.lang.reflect 获取User中的属性和方法
Field[] fields = clazz.getDeclaredFields();
Method method =clazz.getDeclaredMethod("setName",String.class);
//获取User中的注释
Annotation[] annotations = clazz.getAnnotations();
//创建实例对象
Object obj = clazz.newInstance();
method.invoke(obj,"yangyang");
}
}
打入断点后,返回结果如下:
fields 和method,annotations及其个数均可见,且name属性值做了变化。
反射技术的应用
- 注解的使用
- 运行期从配置文件读取配置,从而动态配置一些东西
如:在xml或properties的键值对配置文件,Java解析xml或properties配置文件,反射获取class文件对象,获取方法并运行