隨筆 - 115  文章 - 481  trackbacks - 0
          <2006年10月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(19)

          隨筆檔案(115)

          文章檔案(4)

          新聞檔案(1)

          成員連接

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

            在超輕量級開源ORM系統EasyDBO,可以根據情況把屬性設置成延遲加載,從而大大提高應用程序的性能。比如一個域對象中所包括一個order屬性,則可以像下面這樣設置:? <one-to-one name="order" type="com.easyjf.dbo.example.Order" column="orderId" key="cid" lazy="true">????????
          ??????? </one-to-one>
            
            EasyDBO中的延遲加載是使用CGLIB實現的,下面我們來看看延遲加載的實現原理:
            1、設計一個延遲加載器(回調),實現CGLIB的LazyLoader接口。
            2、在第一次創建域對象DOM(PO)的時候,使用CGLIB的Enhancer創建一個需要延遲加載的屬性對象,這其中需要使用上面的延遲加載器作為參數。
            3、當用戶在第一次訪問到延遲加載的對象時,則會調用延遲加載器中的loadObject方法來實際加載對象。
          ?
            下面是一個非常簡單例子,通過后臺可以看到:在使用new TB(),然后訪問其cid屬性的時候,延遲加載的Bean還沒有創建,只有在訪問其TB的bean屬性時,才會創建TestBean對象,并作相應的初始化處理工作:
          ?
          BeanTest.java
          public class BeanTest extends TestCase {
          ?
          ?public void testBean()
          ?{?
          ?TB tb=new TB();
          ?System.out.println(tb.getCid());
          ?System.out.println("--");
          ?System.out.println(tb.getBean().getUserName());?
          ?}
          ?
          Lazy implements net.sf.cglib.proxy.LazyLoaderLazyLoader
          ?{
          ??public Object loadObject() throws Exception {
          ???// TODO Auto-generated method stub
          ???System.out.println("開始延遲加載!");
          ???TestBean bean=new TestBean();
          ???bean.setUserName("test");
          ???return bean;
          ??}
          ?}
          ?
          class TB{
          ?private String cid;
          ?private TestBean bean;
          ?LazyLoader lazy=new Lazy();
          ?public TB()
          ?{
          ??cid="1245454";
          ??bean=(TestBean)net.sf.cglib.proxy.Enhancer.create(TestBean.class,lazy);
          ?}
          ?public TestBean getBean() {
          ??return bean;
          ?}
          ?public void setBean(TestBean bean) {
          ??this.bean = bean;
          ?}
          ?public String getCid() {
          ??return cid;
          ?}
          ?public void setCid(String cid) {
          ??this.cid = cid;
          ?}
          ?}
          ?
          }
          ?
          TestBean.java
          public class TestBean {
          ?private String userName;
          ?private Integer sequence;
          ?public Integer getSequence() {
          ??return sequence;
          ?}
          ?public void setSequence(Integer sequence) {
          ??this.sequence = sequence;
          ?}
          ?public String getUserName() {
          ??return userName;
          ?}
          ?public void setUserName(String userName) {
          ??this.userName = userName;
          ?}
          ?public void test() {
          ??// TODO Auto-generated method stub
          ??
          ?}?
          }
            
          posted on 2006-10-20 09:35 簡易java框架 閱讀(2493) 評論(1)  編輯  收藏

          FeedBack:
          # re: 使用CGLIB輕松實現延遲加載(Lazyloader) 2006-10-23 10:52 11
          增開7群,號碼 30440732
          8群 30756649
          9群 30178567
          10群 28694497
          我們的qq群:15096318 學習程序的都可以來
          www.mylinux.com.cn 包羅java,linux,數據庫,安全等等技術資料,更有眾多軟件外包項目,所有項目直接與mylinux簽署合同,保證用戶的合法權利.
          qq群:15096318(已滿) 26343297(已滿) 26343309(已滿) 20767472(已滿) 30440614(已滿)21189212(已滿)

            回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 射阳县| 噶尔县| 涞水县| 综艺| 龙川县| 容城县| 梅河口市| 宝应县| 准格尔旗| 新野县| 屯留县| 尉犁县| 天镇县| 景洪市| 栖霞市| 博湖县| 原阳县| 南和县| 当雄县| 大城县| 丰顺县| 乐都县| 伊金霍洛旗| 托克逊县| 太和县| 长兴县| 沈丘县| 改则县| 崇文区| 天祝| 定兴县| 邢台市| 福海县| 任丘市| 贵德县| 上饶县| 松阳县| 定西市| 昭通市| 新野县| 射阳县|