我正在使用ORM / ODM(morphia)来管理我的模型,但我遇到了一个问题:
模型的构造函数仅在创建对象(new MyObject(dep1, dep2)
)时调用,并且在从db(db.get(id)
)加载时不会被调用。
如何将不可序列化的依赖项注入ORM管理的对象?
我一直在将依赖项直接注入任何需要它的方法,即
public void doSomething(UserDAO userDAO) { ... }
但这很快导致丑陋的代码。还有更好的方法吗?
答案 0 :(得分:0)
如果要在加载后为实体设置不可序列化的依赖项,则可以使用生命周期注释@PostLoad
[Life Cycle Methods]。
在示例中
@PostLoad
void postLoad() {
userDAO = // e.g. new UserDAO() or UserDAO.getInstance();
}
虽然这是可能的,但我并不是说这是一个好方法。您应该考虑将实体(域对象)和服务功能(应用程序层)分开(请参阅SoC)。
但是不要误解我的意思并不意味着您的域对象根本不应包含任何逻辑。