3

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

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

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

我可以使用 ServiceLocator 改进它

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

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

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

我的想法有问题吗?

4

2 回答 2

1

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

你可以在这里看到一个例子: https ://github.com/stickfigure/motomapia/blob/master/java/com/motomapia/OfyFactory.java

于 2012-10-30T05:09:34.837 回答
0

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

context:load-time-weaver 将 AspectJ 的 Load-time Weaver 注册到当前类加载器。因此,不仅 Spring bean 将成为目标,而且类加载器中加载的任何与定义的切入点匹配的类都将成为目标。

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

于 2012-10-29T15:44:51.183 回答