我正在使用orm/odm(morphia)来管理我的模型,但我遇到了一个问题:
模型的构造函数仅在创建对象时调用(new MyObject(dep1, dep2)),而在从db(db.get(id))加载时不调用。
如何将不可序列化的依赖项注入orm托管对象?
我一直在把依赖项直接注入任何需要它的方法。

public void doSomething(UserDAO userDAO) { ... }

但这很快就导致了难看的代码。有更好的办法吗?

最佳答案

如果要在加载实体后将非序列化依赖项设置为实体,则可以使用生命周期注释@PostLoad[Life Cycle Methods]
例如

@PostLoad
void postLoad() {
   userDAO = // e.g. new UserDAO() or UserDAO.getInstance();
}

虽然这是可能的,但我不认为这是一个好的方法。您应该考虑将实体(域对象)和服务功能(应用程序层)分离(请参见SoC)。
但别误会这并不意味着你的域对象不应该包含任何逻辑。

10-06 06:14