Java 我可以将依赖项注入到非DI框架创建的对象中吗

Java 我可以将依赖项注入到非DI框架创建的对象中吗,java,dependency-injection,guice,objectify,Java,Dependency Injection,Guice,Objectify,如何将依赖项注入到不是由DI框架创建的对象中 我使用Objectify在Google App Engine上运行一个应用程序,因此当从数据存储中获取数据时,Objectify会创建POJO。就我个人而言,我喜欢使用方便的方法来获取相关对象,比如car.getOwner().getName()car对象是由Objectify创建的。getOwner()所有者的代码如下 public Person getOwner(){ return PersonService.getById(this.o

如何将依赖项注入到不是由DI框架创建的对象中

我使用Objectify在Google App Engine上运行一个应用程序,因此当从数据存储中获取数据时,Objectify会创建POJO。就我个人而言,我喜欢使用方便的方法来获取相关对象,比如car.getOwner().getName()car对象是由Objectify创建的。getOwner()所有者的代码如下

public Person getOwner(){
    return PersonService.getById(this.ownerId);
}
我可以用ServiceLocator来改进它

public Person getOwner(){
    return ServiceLocator.getService(PersonService.class).getById(this.ownerId);
}
但是我该如何处理DI呢

我查看了Guice,但我只能考虑将注入器放在一个单例中,并从getOwner方法访问它


我的想法有缺陷吗?

我能想到的唯一解决方案是加载时编织:

context:load time weaver将AspectJ的load time weaver注册到 当前的类加载器。因此,不仅春豆会成为目标, 但是类加载器中加载的任何与定义的 切入点


但我认为这会与GAE限制冲突,但我还没有在GAE中尝试过这一点。

如果使用Objectify4,则可以将ObjectifyFactory子类化并重写construct()方法。这将允许您注入实体类


您可以在这里看到一个示例:

不直接回答,但将数据存储操作隐藏在看似无辜的getter后面迟早会适得其反。客户机代码希望能够以任何速度调用getter,而不会出现性能问题。例如,在GUI视图中,当组件移动时,重绘侦听器每秒可以调用它数十次。还有很多其他的场景。我正在编写一个web应用程序,有几个级别的缓存。这种方法使得从模板内延迟加载数据变得非常容易。这就是我喜欢它的原因。我已经用这种方法工作多年了。不过,测试它们是一件痛苦的事情。这就是我问这个问题的原因。@MarkoTopolnik这就是大多数ORM的工作原理。Hibernate也做了同样的事情(看起来更天真,因为实现实际上是在代理中)。@Pache是的,Hibernate是另一个同样的例子。我曾经用它把自己挖到一个洞里,也读过很多其他用户的恐怖故事。自那次事件以来,我以一种完全不同的方式使用了Hibernate:不是作为一个智能的持久状态管理器,而是作为SQL查询上的一个薄层。“从那以后,我的生活一直很幸福,表演也很精彩。”MarkoTopolnik很有趣。虽然我没有遇到过这样的问题,但我可以相信这会是多么痛苦。此外,这也不是我第一次听说您使用hibernate的方法。绝对值得一看。