Java 創建對象方式:
    ●  用new語句創建對象
    ●  運用反射手段,調用java.lang.Class 或者 java.lang.reflect.Constructor 類的newInstance()實例方法
    ●  調用對象的clone()方法
    ●  運用序列化手段,調用java.io.ObjectInputStream 對象的 readObject()方法.

分別創建100萬個javaBean ,性能如下:


//new : 46,47,47,62,47
//clone : 171,188,172,,157,172
//getClass().newInstance() : 140,141,141,,157,172
//Class.forName and newInstance : 1765,1781,1813,1797,1781
//Proxy.newProxyInstance : 2984
//Serializable : 60422

另外測試了Field 和 Method 執行效率:
//method : 1406
//feild : 1360 getField("")得到實例和父類的“公共”屬性
//getDeclaredField() 得到實例的指定屬性(Public,protected,dfault,pivate),不包括父類屬性
//getFields()返回field數組, 得到實例 和 父類 的所有  “公共”屬性

動態代理:
JDK:jdk1.7.0_02 
CGLIB:和spring2.0.6 使用同樣的cglib-nodep-2.1_3.jar 
CPU:P8400 2.53GHz 2.53GHz 
測試結果4: 
Create JDK Proxy: 43 ms 
Create CGLIB Proxy: 129 ms
Run JDK Proxy: 940 ms, 1,500,069 t/s
Run CGLIB Proxy: 299 ms, 4,715,937 t/s
CGLIB創建代理對象速度大概比JDK Proxy慢3倍,執行速度是JDK Proxy的3倍以上

區別:
如果一個目標對象如果實現了接口Spring則會選擇JDK動態代理策略動態的創建一個接口實現類(動態代理類)來代理目標對象,可以通俗的理解這個動態代理類是目標對象的另外一個版本,所以這兩者之間在強制轉換的時候會拋出java.lang.ClassCastException。而所以在默認情況下,如果目標對象沒有實現任何接口,Spring會選擇CGLIB代理, 其生成的動態代理對象是目標類的子類。
spring 配置實用cglib動態代理
 proxy-target-class 屬性設為true 或 <aop:aspectj-autoproxy proxy-target-class="true"/>