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

自然的訪問spring容器中的bean

2013-11-23 20:19:30  來源: Java開源技術 
    Spring依賴其IOC特征輕松的管理著一堆非常有價值的bean這些bean在spring容器中的依賴關系都已注入好所以相互調用非常方便

  但既然是有價值的bean我們就想在Java代碼的各處都能調用實際中的確有這樣的場景比如

  Struts的action要用其中的service;

  充血領域模型的Hibernate實體會需要dao

  要調用這些bean現在也確實有很多做法

  以下代碼描述的方式被稱為bad smell是最不自然的方式不被提倡;

  JDBCDao jdbcDao = (JdbcDao)springContextgetBean(jdbcDao);

  自然的調用方式是你調用的bean也是注入的

  struts是通過一個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=netjackerdaoJdbcDao>

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

    </bean>

  這樣只要spring容器啟動構造好bean後就會自行將其注入到靜態變量然後在各處的調用就很簡單了

  
   public class UserAction {
  JdbcDao jdbcDao = JdbcDaoget();
  public String execute(){
  jdbcDaoquery();
  }
  
  }

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

  最後要說的就是這也是單件模式的一種實現使用spring容器配置注入好你的單件對象並在任何地方使用之


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