假设我有一个实体“MyUser”,我不想将所有逻辑存储在其中。据我了解文档,我可以将逻辑添加到服务定位器中。我在请求上下文中链接了服务定位器:
@Service(value = MyUser.class, locator = MyServiceLocator.class)
public interface MyUser extends RequestContext {
InstanceRequest<MyUserProxy, Void> setName(String name);
Request<Void> changePasswordAndSendMail(String password);
}
并像这样定义定位器:
public class MyServiceLocator implements ServiceLocator {
@Override
public Object getInstance(Class<?> clazz) {
try {
return clazz.newInstance();
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
public static void changePasswordAndSendMail(String password){
// Do something
}
}
但是编译器提示:
Could not find domain method similar to myPackage.MyUser changePasswordAndSendMail(java.util.String)
有没有办法从实体中提取逻辑?
最佳答案
如果你希望你的逻辑在 MyUser
之外,然后只需更改 @Service
的值到具有该逻辑的类(我认为问题中的 @ProxyFor
是您的错误)。
如果该类上的方法不是 static
那么你需要一个ServiceLocator
返回该类的一个实例。服务定位器本身除了定位包含服务方法的服务之外,还执行其他任何操作。
从方法为 static
的状态迁移在MyUser
,只需创建另一个类,移动static
那里的方法(当然除了 findMyUser
方法)并更改您的 @Service
指向新类。
请注意InstanceRequest
方法仍然调用@ProxyFor
指向的类的实例方法。代理上的注释被引用为 InstanceRequest
的第一个类型参数。在您的示例中,setName
需要是 MyUser
上的实例方法(假设 MyUserProxy
用 @ProxyFor(MyUser.class)
注释)
关于java - GWT RequerstFactory - 从实体提取代码到服务定位器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23680521/