public static void main(String[] args) throws IllegalAccessException,
IllegalArgumentException, InvocationTargetException,
NoSuchMethodException, SecurityException {
ArrayList<Integer> list = new ArrayList<Integer>();
Class c = list.getClass();// 集合ArrayList的class文件对象
Method m = c.getMethod("add", Object.class);
m.invoke(list, "qwe");// 调用list的add方法,传入值一个字符串对象
System.out.println(list);
}
}
(4)反射案例
A:通过反射运行配置文件的内容
B:通过反射越过泛型检查
C:通过反射给任意的一个对象的任意的属性赋值为指定的值
(5)动态代理:其实就是通过反射来产生一个代理。
在Java中java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口就可以生成动态代理对象。JDK提供的代理只能针对接口做代理。我们有更强大的代理cglib
案例
//创建接口
public interface UserDao {
public abstract void add();
public abstract void delete();
public abstract void update();
public abstract void find();
}
//创建类实现接口
public class UserDaoImpl implements UserDao{
@Override
public void add() {
System.out.println("添加功能");
}
@Override
public void delete() {
System.out.println("删除功能");
}
@Override
public void update() {
System.out.println("更新功能");
}
@Override
public void find() {
System.out.println("查找功能");
}
}
//创建类实现InvocationHandler接口,重写invoke()方法
public class MyInvocationHandler implements InvocationHandler {