我想將持久性實體的依賴注入,但我不知道它是如何做到的。你可以在持久實體中使用依賴注入嗎?
我的GWT應用程序中的哈希算法需要Base64實現。 GWT附帶一個老版本的commons-codec。由於名稱衝突 - 我不使用Maven,我可以找出如何使用舊的或使用其他實現,如Base64.iharder.net。
修改了幾個選擇後,我爲每個選項創建了一個接口和適配器類。我注入了一個實現。這似乎是一個經典的用例。
當創建持久實體時,一切正常。然而,在存儲和檢索它們之後,之前被注入並且不被保存的字段被實例化爲空值。
這個問題很有道理。我使用DataNucleus,它添加了一個無參數構造函數。 DataNucleus不再注入依賴關係。
如何在從數據存儲中檢索對象時請求我的持久性框架重新注入依賴項?
謝謝。
// salted hash for password storage
@PersistenceCapable
public class SaltedHash implements Serializable {
private static final long serialVersionUID = 1L;
private String salt;
private String hash;
@NotPersistent
private final Base64Codec base64Codec;
@NotPersistent
private final Sha265Hash sha256Hash;
@NotPersistent
private final Random random;
@Inject
public SaltedHash(Base64Codec b64, Sha256Hash sha256, Random rnd) {
base64Codec = b64;
sha256Hash = sha256;
random = rnd;
}
public void setSecret(String secret) {
salt = base64Codec.encode(generateSalt());
hash = base64Codec.encode(sha256Hash.hash(salt + secret));
}
public boolean matches(String secret) {
String maybe = base64Codec.encode(sha256Hash.hash(salt + secret));
return hash.equals(maybe);
}
private byte[] generateSalt() {
// use random to generate a salt
}
}
謝謝@an。在考慮了你的意見後(我把它引向了關鍵的搜索術語CDI,「焊接」和託管的豆類),我的結論是我的設計模式並不常見。我現在只使用輕量級豆類和setter和getters。我將邏輯轉移到單獨的「處理器」類中。整個事情似乎並不是面向對象的,但處理器類現在可以測試。再次謝謝你。 – 2012-07-31 21:09:37