熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

我來說說Bean的使用方法

2022-06-13   來源: Java核心技術 

  最近討論主要圍繞在公共構造函數以及工廠模式身上我在此分貼說說我對 Bean的看法因為最近項目使用到了webworkspringhibernate我主要結合這些框架來談談我個人對pojo bean的認識
  bean的規范使得對象屬性填充得到動態支持Bean的規范使得對象圖的建立非常清晰OGNL正是基於此實現
  在對bean屬性賦值 與 bean的定義之間插入一個中間層OGNL得到最大限度的靈活我們舉一個比較極端但確實經常發生的例子(順帶狠狠批一下Struts)
  
  java代碼:
  
  
    // 持久層entity:
   public class BeanA{
  }
    private String name;
    private int number;
    public BeanA(){
  }
    }
    public String getName(){
  }
  return name;
    }
    public void setName(String name){
  }
     thisname=name;
    }
    public int getNumber(){
  }
     return number;
    }
    public void setNumber(int num){
  }
     number=num;
    }
   }
  
   //視圖層form:
   Struts:
   public class BeanAForm{
  }
    private String name;
    private String number;
    public BeanA(){
  }
    }
    public String getName(){
  }
     return name;
    }
    public void setName(String name){
  }
     thisname=name;
    }
    public String getNumber(){
  }
     return number;
    }
    public void setNumber(String num){
  }
     number=num;
    }
   }
  
  
  struts通過form定義利用bean的特性達到form的自動填充然後通過beanutil將form轉到entity或者DTO
  某天客戶覺得需要修改entity增多一個字段barstruts的做法是修改form修改entity修改配置文件的form定義修改客戶端jsp文件等等然後編譯通過update database schema
  webwork的做法就非常簡單了在open session in filter模式下只需改動
  entity的定義即可ognl將所有的問題變得簡單得可怕
  OGNL完全將客戶端到服務器端的參數傳遞代理了只要你在你的action定義相應的name setterognl自動識別到這個setter自動將參數傳遞進來
  對於多層關聯的情況最極端的如下
  
  java代碼:
  
   public class A{
  }
    private B b;
    //getter
    //setter
   };
   public class B{
  }
    private C c;
    //getter setter
   };
   public class C{
  }
    String name;
  
   };
  
  你在視圖層只暴露了A對象而需要通過form修改C對象的值這種情況在struts我不知道它怎麼實現但是在webwork下依賴OGNL您要做的僅僅寫下這麼一句name=abcname Ognl自動將name的值填充到c的屬性
  討論了這麼多回過頭來看是什麼東西使得我們web開發變得簡單了呢?是OGNL那麼OGNL為什麼這麼強大呢?因為OGNL是基於Bean的對象圖尋找方式!!
  到這裡我們看到了Bean是一切的基礎沒有bean就沒有OGNL
  同樣看看IoC容器一樣的道理沒有Bean就沒有IoC容器的實現如果采用bean的格式定義你的組件 那麼意味著你的組件是可裝配的如果采用bean定義的entity意味著你的entity是可以自動填充的
  現在評價一個軟件好壞可裝配性是一個重要目標假設一個較復雜得系統我們分析一下它的運作
  A系統由 子系統C 子系統B 構成子系統C 由CCC等等服務組件構成每個服務組件又需要調用多個基本服務類來協作子系統B同樣構架
  
  系統啟動過程
  bootrap啟動服務守護引擎引擎讀取配置文件相關初始化
  
  服務過程
  一個請求上來守護引擎根據請求映射需要調用C子系統的服務接口C子系統的服務接口未裝載請求beanfactory裝載C子系統的服務接口beanfactory讀取C系統接口配置發現這個接口具體實現類以及這個具體實現類需要到的CCC組件又根據引用讀取C等的配置信息知道最後的服務類是最簡單的POJO bean逐一初始化所有需要用到的類然後調用已經實例化的接口完成服務
  
  改動過程
  CC組件需要改善功能增加CC組件寫代碼編譯打包修改配置文件發布
  服務過程如上
  
  這個系統是完全可插入的因為它所有的服務過程都是基於組件的組件是可裝配的試想一下如果其中的C或者C不是Bean格式也就是說沒有公開構造器那麼這一切優雅的實現就斷節了就算要實現這麼一個類似的實現也要需要花費大量的精力物力來填補構造器的模式
  

From:http://tw.wingwit.com/Article/program/Java/hx/201311/25557.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.