goldrain

          金色雨點

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            37 隨筆 :: 2 文章 :: 239 評論 :: 0 Trackbacks
          Spring依賴其IOC特征,輕松的管理著一堆非常有價值的bean,這些bean在spring容器中的依賴關系都已注入好,所以相互調用非常方便。

          但既然是有價值的bean,我們就想在Java代碼的各處都能調用,實際中的確有這樣的場景,比如:
          struts的action要用其中的service;
          充血領域模型的hibernate實體會需要dao。

          要調用這些bean,現在也確實有很多做法:
          以下代碼描述的方式,被稱為bad smell,是最不自然的方式,不被提倡;

          JdbcDao jdbcDao = (JdbcDao)springContext.getBean("jdbcDao");


          自然的調用方式是,你調用的bean,也是注入的:
          struts2是通過一個spring plugin來做到的;
          hibernate就沒那么簡單了,要用到annotation聲明,要什么AspectJ織入,概念復雜,麻煩之極;

          我有一個簡單的做法,至少對單件的bean很可行(一般我們需要的bean也就是單件的)。思路很簡單,依靠spring的注入機制,把容器內的bean注入為靜態變量。而靜態變量天然就是各處可用的。以下是代碼:

          Java:
          public class JdbcDao {


              
          //靜態變量
              private static JdbcDao instance;

              
          //靜態方法,獲取單件對象
              public static JdbcDao get(){
                  
          return instance;
              }

              
          //對象方法,注入到靜態變量
              public void setInstance(JdbcDao _inst){
                instance 
          = _inst;
              }

              public List query(String sql){
                 ....
              }



          }

          spring配置,將自身注入:
              <bean id="jdbcDao" class="net.jacker.dao.JdbcDao">

                  
          <property name="instance">
                      
          <ref bean="jdbcDao" />
                  
          </property>

              
          </bean>


          這樣,只要spring容器啟動,構造好bean后,就會自行將其注入到靜態變量,然后在各處的調用就很簡單了:
              public class UserAction {
                 JdbcDao jdbcDao 
          = JdbcDao.get();

                 
          public String execute(){
                     jdbcDao.query();
                 }

                 ...

              }


          注:網上有一些思路也是從靜態變量入手的,但做法有所不同,有的需要依賴web容器,就不多做介紹了。

          最后要說的就是,這也是單件模式的一種實現,使用spring容器配置注入好你的單件對象,并在任何地方使用之。
          posted on 2009-04-02 12:04 goldrain 閱讀(1576) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 龙州县| 右玉县| 开鲁县| 阿尔山市| 大渡口区| 尼勒克县| 淮安市| 临邑县| 应城市| 黄浦区| 华蓥市| 天峨县| 樟树市| 平泉县| 双桥区| 永春县| 克东县| 广南县| 霸州市| 监利县| 敖汉旗| 遂川县| 同心县| 铜鼓县| 且末县| 沁源县| 海丰县| 永胜县| 墨竹工卡县| 靖江市| 长宁县| 桃源县| 六枝特区| 盈江县| 湄潭县| 福安市| 金溪县| 怀柔区| 玉龙| 望城县| 芜湖县|