我正在使用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)。
但别误会这并不意味着你的域对象不应该包含任何逻辑。