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

          常用鏈接

          留言簿(19)

          隨筆檔案(115)

          文章檔案(4)

          新聞檔案(1)

          成員連接

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

            在超輕量級開源ORM系統(tǒng)EasyDBO,可以根據(jù)情況把屬性設(shè)置成延遲加載,從而大大提高應(yīng)用程序的性能。比如一個域?qū)ο笾兴ㄒ粋€order屬性,則可以像下面這樣設(shè)置:? <one-to-one name="order" type="com.easyjf.dbo.example.Order" column="orderId" key="cid" lazy="true">????????
          ??????? </one-to-one>
            
            EasyDBO中的延遲加載是使用CGLIB實現(xiàn)的,下面我們來看看延遲加載的實現(xiàn)原理:
            1、設(shè)計一個延遲加載器(回調(diào)),實現(xiàn)CGLIB的LazyLoader接口。
            2、在第一次創(chuàng)建域?qū)ο驞OM(PO)的時候,使用CGLIB的Enhancer創(chuàng)建一個需要延遲加載的屬性對象,這其中需要使用上面的延遲加載器作為參數(shù)。
            3、當(dāng)用戶在第一次訪問到延遲加載的對象時,則會調(diào)用延遲加載器中的loadObject方法來實際加載對象。
          ?
            下面是一個非常簡單例子,通過后臺可以看到:在使用new TB(),然后訪問其cid屬性的時候,延遲加載的Bean還沒有創(chuàng)建,只有在訪問其TB的bean屬性時,才會創(chuàng)建TestBean對象,并作相應(yīng)的初始化處理工作:
          ?
          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框架 閱讀(2495) 評論(1)  編輯  收藏

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

            回復(fù)  更多評論
            

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


          網(wǎng)站導(dǎo)航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 黑水县| 防城港市| 新源县| 靖江市| 江陵县| 安徽省| 阿克陶县| 察隅县| 班玛县| 十堰市| 无棣县| 牙克石市| 肇州县| 岱山县| 三门峡市| 双柏县| 奉节县| 濮阳县| 惠东县| 长泰县| 额尔古纳市| 土默特左旗| 莆田市| 天祝| 泸溪县| 孙吴县| 木里| 苍溪县| 饶河县| 钟山县| 和田县| 凤凰县| 康乐县| 临安市| 眉山市| 聂拉木县| 兴城市| 吉林省| 公主岭市| 鸡东县| 阿鲁科尔沁旗|