goldrain

          金色雨點(diǎn)

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            37 隨筆 :: 2 文章 :: 239 評(píng)論 :: 0 Trackbacks

          公告

          技術(shù)研究,貨代軟件使用說明,都在本博客發(fā)布.

          goldrain常去的鏈接

          參考

          網(wǎng)友blogs

          最新隨筆

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          Spring依賴其IOC特征,輕松的管理著一堆非常有價(jià)值的bean,這些bean在spring容器中的依賴關(guān)系都已注入好,所以相互調(diào)用非常方便。

          但既然是有價(jià)值的bean,我們就想在Java代碼的各處都能調(diào)用,實(shí)際中的確有這樣的場(chǎng)景,比如:
          struts的action要用其中的service;
          充血領(lǐng)域模型的hibernate實(shí)體會(huì)需要dao。

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

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


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

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

          Java:
          public class JdbcDao {


              
          //靜態(tài)變量
              private static JdbcDao instance;

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

              
          //對(duì)象方法,注入到靜態(tài)變量
              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容器啟動(dòng),構(gòu)造好bean后,就會(huì)自行將其注入到靜態(tài)變量,然后在各處的調(diào)用就很簡(jiǎn)單了:
              public class UserAction {
                 JdbcDao jdbcDao 
          = JdbcDao.get();

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

                 ...

              }


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

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 合肥市| 剑川县| 杨浦区| 石嘴山市| 金溪县| 龙门县| 辉县市| 左权县| 隆子县| 泗水县| 民丰县| 新闻| 成武县| 吴旗县| 中牟县| 封丘县| 昭平县| 甘肃省| 丰镇市| 金坛市| 从化市| 筠连县| 年辖:市辖区| 徐汇区| 鄂伦春自治旗| 东阳市| 海门市| 青河县| 且末县| 柏乡县| 丹凤县| 长泰县| 兰溪市| 巴林右旗| 中宁县| 清流县| 邮箱| 惠州市| 天津市| 乐清市| 大竹县|