标签:
1.为什么要学习反射
不要为了学习反射而学习反射,反射只是创建对象的另一种方式
创建对象的几种方式:new 反射 clone 流(webservice/webscoket)
2.下面写了一个示例,模拟框架spring的bean工厂创建对象,调用方法
反射在框架中时常见的,虽然重要,但是不要被它给迷惑了,戳穿了,
也就是那么一回事。
记住:反射只是创建对象的另一种方式而已
1 package com.rui.test; 2 3 public class Person { 4 5 private String name; 6 private Integer age; 7 8 public Person(){} 9 public Person(String name,Integer age){ 10 this.name = name; 11 this.age = age; 12 } 13 14 public void study(){ 15 System.out.println(this.name+"在"+this.age+"小学毕业"); 16 } 17 }
1 package com.rui.test; 2 import java.lang.reflect.Constructor; 3 import java.lang.reflect.Method; 4 5 import org.junit.Test; 6 7 /** 8 * 9 * 反射测试 10 * @author poseidon 11 * 12 */ 13 public class RecflectDemo { 14 15 @Test 16 public void testPerson() throws Exception { 17 //创建对象 18 ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 19 Class clz = classLoader.loadClass("com.rui.test.Person"); 20 //解析构造函数 21 Constructor[] constructors = clz.getConstructors(); 22 Person person = (Person)constructors[1].newInstance("华罗庚",12); 23 //获得方法并调用 24 Method method = clz.getMethod("study"); 25 method.invoke(person); 26 } 27 28 /** 29 * 封装反射创建对象的方法 30 * @param packageName 31 * @param args 32 * @return 33 */ 34 public static<T> T objectNewInstance(String packageName,Object...args){ 35 try { 36 ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 37 Class clz = classLoader.loadClass(packageName); 38 T t = (T)clz.newInstance(); 39 return t; 40 } catch (Exception e) { 41 e.printStackTrace(); 42 return null; 43 } 44 } 45 }
执行后的结果:华罗庚在12小学毕业
标签:
原文地址:http://www.cnblogs.com/sun-rain/p/4887744.html