1. 程式人生 > >Spring如何注入靜態變數

Spring如何注入靜態變數

原文地址:http://www.connorgarvey.com/blog/?p=105

Spring的架構對於靜態類和靜態方法的支援並不是很友好。Spring沒有現成的辦法來完成靜態欄位的注入,這是因為Spring根本就無法檢測到這些靜態屬性。Spring的設計者意識到這個缺點,然後提出瞭如下的解決方案:

定義類的靜態欄位時不實用任何註解;

對有靜態屬性的類標註@Component 註解,使得這些屬性在Spring啟動時注入;

定義一個非靜態的setter方法,使用該方法為靜態屬性賦值

把這個setter方法標註 @Autowired(required = true) 註解。


@Component
public class UserUtils
{
  private static UserAccessor userAccessor;
 
  /**
   * Sets the user DAO. This method should never be called except by Spring
   * @param userAccessor The user accessor to set
   */
  @Autowired(required = true)
  public void setUserAccessor(UserAccessor userAccessor) {
    UserUtils.userAccessor = userAccessor;
  }

採用這種方法,我們就可以揚長避短、開開心心地使用Spring的註解功能。但是要注意,我們應該進可能地避免使用它。這種方法只應該用於對遺留系統的相容和支援。因為對於存在大量靜態欄位的應用而言,其可擴充套件性會受到限制。