gpt4 book ai didi

dependency-injection - 你可以在持久实体中使用依赖注入(inject)吗?

转载 作者:行者123 更新时间:2023-12-04 05:38:14 26 4
gpt4 key购买 nike

我想为我的持久实体带来依赖注入(inject),但我不确定如何做到这一点。

我的 GWT 应用程序中的加盐哈希算法需要 Base64 实现。 GWT 附带旧版本的 commons-codec。由于名称冲突——我不使用 Maven——我可以弄清楚如何使用旧版本或使用另一种实现,例如 Base64.iharder.net。

在调整了几个备选方案之后,我为每个备选方案创建了一个接口(interface)和适配器类。我注入(inject)了一个实现。这似乎是一个经典的用例。

创建持久实体后,一切都运行良好。然而,在存储和检索它们之后,先前注入(inject)且未持久化的字段被实例化为空值。

这个问题很有意义。我使用 DataNucleus,它添加​​了一个无参数构造函数。 DataNucleus 不会再次注入(inject)依赖项。

从数据存储中检索对象时,如何要求我的持久性框架重新注入(inject)依赖项?

谢谢你。

// 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
}
}

最佳答案

持久实体的生命周期通常与托管 bean 的生命周期分离。这就是为什么不鼓励在 JPA 托管实体中使用 DI/CDI 的原因。

According to this definition, JPA entities are technically managed beans. However, entities have their own special lifecycle, state and identity model and are usually instantiated by JPA or using new. Therefore we don't recommend directly injecting an entity class. We especially recommend against assigning a scope other than @Dependent to an entity class, since JPA is not able to persist injected CDI proxies.



我认为情况类似于DataNucleus。尤其是这...

How can I ask my persistence framework to re-inject the dependencies when retrieving the object from the data store?



... 可能非常棘手,因为依赖项在某些星座中代理(阅读:范围),但直接注入(inject)到其他星座中。

我的猜测是,如果您以实体不依赖 DI 的方式重新设计模型,会容易得多。

关于dependency-injection - 你可以在持久实体中使用依赖注入(inject)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11638311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com