反射机制是什么,动态代理怎么理解?
-
反射是java提供的一种基础功能,提供程序自省的能力。通过反射可以用来访问类的定义,类的属性,动态构建对象等。
-
动态代理是一种能够在运行时动态构建代理,动态构建代理对象进行动态的访问,在很多的框架里使用,比如RPC框架、AOP、数据库访问等。
-
反射机制:
- 反射可以运行时获取一个对象所属的类
- 反射可以运行时动态创造一个类的对象。
- 反射可以运行时动态获取一个类的方法和属性(公共的)
- 反射可以执行一个对象的方法。通过invoke可以调用反射获取到的方法。
invoke如何实现动态调用一个对象的方法?
- invoke 权限检查。AccessibleObject 类是 Field、Method 和 Constructor 对象的基类。它提供了将反射的对象标记为在使用时取消默认 Java 语言访问控制检查的能力。检查AccessibleObject 的override属性,false表示需要调用权限检查。true不需要。
- 权限检查过后,反射工厂方法生成具体的MethodAccessor的实现。MethodAccessor的实现有两种:c语言实现的本地方法和java实现的MethodAccessor。由于本地的实现在jvm启动阶段执行效率高,故jvm开始阶段的调用的invoke方法由本地实现,当调用次数超过阈值改为java实现MethodAccessor。