Spring如何注入靜態變數
阿新 • • 發佈:2018-12-05
原文地址: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的註解功能。但是要注意,我們應該進可能地避免使用它。這種方法只應該用於對遺留系統的相容和支援。因為對於存在大量靜態欄位的應用而言,其可擴充套件性會受到限制。