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

时间:2012-10-29 15:01:46

标签: java dependency-injection guice objectify

如何将依赖项注入到非DI框架创建的对象中?

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

public Person getOwner(){
    return PersonService.getById(this.ownerId);
}

我可以使用ServiceLocator

来改进它
public Person getOwner(){
    return ServiceLocator.getService(PersonService.class).getById(this.ownerId);
}

但我如何用DI做到这一点?

我看了Guice,但我只想把Injector放在一个单例中并从getOwner方法访问它。

我的想法有缺陷吗?

2 个答案:

答案 0 :(得分:1)

如果您正在使用Objectify4,则可以继承ObjectifyFactory并覆盖construct()方法。这将允许您注入实体类。

您可以在此处查看示例:https://github.com/stickfigure/motomapia/blob/master/java/com/motomapia/OfyFactory.java

答案 1 :(得分:0)

我能想到的唯一解决方案是加载时间编织,I quote

  

上下文:load-time-weaver将AspectJ的Load-time Weaver注册到   当前的类加载器。因此,不仅会将Spring bean作为目标,   但是在类加载器中加载的任何类都与定义的匹配   切入点。

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