如何将依赖项注入到非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方法访问它。
我的想法有缺陷吗?
答案 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中尝试过这个。