一, Java 中的反射
1. 说说你对 Java 中反射的理解
java 中的反射首先是能够获取到 Java 中要反射类的字节码, 获取字节码有三种方法.
1.Class.forName(className)
2. 类名. class
3.this.getClass. 然后将字节码中的方法, 变量, 构造函数等映射成相应 Method.Filed.Constructor 等类
这些类提供了丰富的方法可以被我们使用
二, Java 中的动态代理
1. 动静代理的区别, 什么场景使用
静态代理通常只代理一个类, 动态代理是代理一个接口下的多个实现类
静态代理事先知道代理的是什么, 而动态代理不需要知道代理什么东西, 只有在运行时才知道
动态代理是实现 JDK 里的 InvocationHandler 接口的 invoke 方法, 但注意的是代理的是接口, 也就是业务类要实现的接口
, 通过 Proxy 里的 newProxyInstance 得到代理对象
还有一种动态代理, CGLIB 代理的类, 不需要业务类继承接口, 通过派生的子类实现代理, 通过在运行时, 动态修改, 字节码达到修改类的目的
AOP 编程就是基于动态代理实现的, 比如著名的 Spring 框架, Hibernate 框架等等都是动态代理的使用例子
来源: http://www.jianshu.com/p/c83b70ddaee6