从反射到动态代理
这部分文章将能解答以下问题:
JVM的类加载过程中加载这一阶段做了什么?
讲一下设计模式中的代理模式
动态代理是什么?
Spring是如何实现AOP的?
初识反射
Java反射可以在程序运行时动态加载类并获取类的详细信息,从而操作类的属性和方法。
从jvm的类加载过程讲起,类的加载是将二进制字节码文件加载到内存中,同时在堆中创建一个Class对象作为访问方法区类结构的唯一入口。反射就是通过这个Class对象来获取类的详细信息。
代理
代理模式就是为一个对象提供一个代理,由代理对象来控制对真实对象的访问的设计模式。
根据字节码的创建时机,可分为静态代理和动态代理。
静态代理
静态代理的字节码文件在程序运行前便已经存在了。
以下是静态代理的一个例子。
interface QueryService{
int query(int id);
}
class QueryServiceImpl implements QueryService{
@Override
public int query(int id){
return 0;
}
}
class QueryServiceProxy implements QueryService{
private QueryService target;
public QueryServiceProxy(QueryService target)