Class文件由类加载器装载后,在JVM中形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息,如构造函数、属性和方法等。
反射对象类在java.lang.reflect包中定义,
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
//定义Car类
public class Car {
private String brand;
private String color;
private int maxSpeed;
public Car()
{}
public Car(String brand, String color, int maxSpeed)
{
this.brand = brand;
this.color = color;
this.maxSpeed = maxSpeed;
}
public void setBrand(String brand)
{
this.brand = brand;
}
public void setColor(String color)
{
this.color = color;
}
public void setMaxSpeed(int maxSpeed)
{
this.maxSpeed = maxSpeed;
}
public void introduce()
{
System.out.println("brand:" + brand + "; color: " + color + " ;maxSpeed: " + maxSpeed);
}
}
//定义反射类
public class ReflectTest {
public static Car initByDefaultConst() throws Throwable
{
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class clazz = loader.loadClass(“Car”);
Constructor cons = clazz.getDeclaredConstructor((Class[]) null);
Car car = (Car)cons.newInstance();
Method setBrand = clazz.getMethod("setBrand", String.class);
setBrand.invoke(car, "红旗CA72");
Method setColor = clazz.getMethod("setColor", String.class);
setColor.invoke(car, "黑色");
Method setMaxSpeed = clazz.getMethod("setMaxSpeed", int.class);
setMaxSpeed.invoke(car, 200);
return car;
}
public static void main(String[] args) throws Throwable
{
Car car = initByDefaultConst();
car.introduce();
}
目前的问题是,Spring如何通过反射加载的这些类呢,请看下节分解《资源访问利器》