技术开发 频道

JAVA程序类加载及其反射机制

  访问属性值

  通过对象的getFields()或getField()方法可以获取该类所包括的全部Field(属性)或指定的Field,Field提供如下两组方法来访问属性:

  getXxx(Object obj):获取obj对象该Field的属性值

  setXxx(Object obj, Xxx val):将obj对象的该Field设置成val值

  使用这两个方法可以随意地访问指定对象的所有属性,包括private访问控制的属性

  必须通过setAccessible(true)取消访问前检查

  操作数组

  在java.lang.reflect包下还提供了一个Array类,Array对象可以代表所有的数组

  使用反射生成JDK动态代理

  在Java的java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口可以生成JDK动态代理类或动态代理对象

  Proxy提供

  static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h):直接创建一个动态代理对象,该代理对象的实现类实现了interfaces指定的系列接口,执行代理对象的每个方法时都会被替换执行InvocationHandler对象的invoke方法。

  通常而言,当我们使用Proxy生成一个动态代理时,往往并不会凭空产生一个动态代理,通常都是为制定的目标对象来生成动态代理。

  这种动态代理在AOP(Aspect Orient Program,即面向切面编程)里被称为AOP代理,AOP代理可代替目标对象,AOP代理包含了目标对象的全部方法,但AOP代理中的方法与目标对象的方法存在差异:AOP代理里的方法可以在执行目标方法之前,之后插入一些通用处理。

0
相关文章