如果将实现分离到一个库中,则可以更好地处理这些情况。
举一个为给定名字和姓氏创建全名的服务的简单示例。
首先,为此创建一个 pojo 实现
public interface NameService {
public String combineName(String firstName, String lastName);
}
public class NameServiceImpl implements NameService {
public String combineName(String firstName, String lastName) {
return firstName + " " + lastName;
}
}
理想情况下,上述接口和实现应该在它自己的包和模块中。例如,构建应该产生一个包含上述内容的 myapp-service-lib.jar。
现在让我们为上述内容创建一个 Rest Service。
public interface NameRestService {
public String combineName(String firstName, String lastName);
... //any other functions
}
@Path("/person/")
public class NameRestServiceImpl implements NameRestService {
@Autowired
private NameService nameService;
@GET
@Path("/name/combine")
public String combineName(@QueryParam("firstname") String firstName, @QueryParam("lastname") String lastName) {
return nameService.combineName(firstName, lastName);
}
...//other restful implementations
}
理想情况下,上述两个类应该在其自己的模块中。例如,构建应该导致 myapp-web-service.jar/war。如果需要,此模块将使用 myapp-service-lib.jar 和其他服务库 jar。
以上两个模块将为您提供混合和匹配使用和部署模型的灵活性。如果您希望 spring mvc 应用程序直接使用服务而不使用 Restful 服务,那么只需使用 spring mvc 应用程序中的 myapp-service-lib.jar 即可。
如果 Web 服务是单独部署的,则可以轻松完成。