Spring 是根據配置文件在運行時生成bean對象的,其基本原理是用了Java 的refelection機制,我們看看java簡單實現一個動態設置屬性的例子

Class?cls=Class.forName("com.entiy.User");

Method?method
=cls.getMethod("SetName",Class?[]{String.class});

?? Object?obj
=cls.newInstance();
?method.invoke(obj,
new?Object[]{"Erica"})

????
return?obj;????????//設置屬性后返回對象(只配置一次)


上面我們同過refelection動態的調用了User對象的SetName()方法設置其name屬性。假設這些屬性都是通過配置文件讀入的,則我們實現了一個最簡單的BeanWrapper。

spring 的BeanWrapper源理相信大家也大體對比中有了理解
Class?cls=Class.forName("com.entiy.User");
Object?obj
=cls.newInstance();

BeanWrapper?bw
=new?BeanwrapperImp(obj);
bw.setProperty(
"name","Eriica");