Java 在Objectify服务类中集成googleguice的建议
我正在考虑在我的新项目中集成GoogleGuice,该项目使用objectify进行数据存储操作 考虑objectify服务的以下基类Java 在Objectify服务类中集成googleguice的建议,java,google-app-engine,guice,objectify,Java,Google App Engine,Guice,Objectify,我正在考虑在我的新项目中集成GoogleGuice,该项目使用objectify进行数据存储操作 考虑objectify服务的以下基类 public abstract class OfyService<T> { private Class<T> clazz; public OfyService(Class<T> clazz) { this.clazz = clazz; } ... service method
public abstract class OfyService<T> {
private Class<T> clazz;
public OfyService(Class<T> clazz) {
this.clazz = clazz;
}
... service methods
}
yservice的公共抽象类{
私人课堂;
公共服务(班级){
this.clazz=clazz;
}
…服务方法
}
下面是用户实体服务类
public final class UserService extends OfyService<User> {
static {
factory().register(User.class);
}
private UserService() {
super(User.class);
}
public static UserService getInstance() {
return UserServiceSingleton._userService;
}
private static class UserServiceSingleton {
public static final UserService _userService = new UserService();
}
}
公共最终类UserService扩展了yservice{
静止的{
factory().register(User.class);
}
私有用户服务(){
super(User.class);
}
公共静态用户服务getInstance(){
返回UserServiceSingleton.\u userService;
}
私有静态类UserServiceSingleton{
公共静态最终用户服务_UserService=new UserService();
}
}
我的所有实体服务类都将遵循此模式。所以我在检查Google Guice是否能让它变得更好,或者当前的实现是否良好
如果Guice模块在我的例子中能够很好地处理依赖关系,那么有人能解释一下这在我的实现中是如何应用的吗?首先与Objectify相关的是,您是否查看了。看起来他们可能会提出更直接的方法 不要使用ObjectifyService static of y()方法,而是使用您自己的方法
public class OfyService {
static {
factory().register(Thing.class);
factory().register(OtherThing.class);
...etc
}
public static Objectify ofy() {
return ObjectifyService.ofy();
}
public static ObjectifyFactory factory() {
return ObjectifyService.factory();
}
}
现在在代码中,导入您自己的静态ofy():
这样,实体注册只进行一次,并且总是在您需要之前进行
关于启动性能,它取决于所使用实体的实例类和复杂性。一般来说,即使是在最低的实例类上,在不到一秒钟的时间内也可能有大约20种实体类型。很可能只有当您有数百种实体类型时,另一种方法才有意义
关于Guice。它与所提供的代码之间的关系并不明显,但我想提出几点建议:
- 通常,如果您注入实体类,您会使自己感到DI头痛,因此,如果您确实必须注入类,您很可能希望避免这样做或使用实体中的工厂
- 对于数据控制器或用户服务(不是您当前的形式)等,它们通常是合理的候选对象,可以将依赖项注入或用作注入依赖项
import static com.yourcode.OfyService.ofy;
Thing th = ofy().load().type(Thing).id(123L).now();