在 Java EE 中拥有服务接口的好处

Benifits of having interfaces for services in Java EE

为 Java EE 中的每个服务提供接口是一种好的(且常见的)做法吗?除了具有指定服务必须实现哪些方法的接口之外,还有哪些其他好处?

一个例子:

public interface UserService {
     public User findUser(String username, String password);
}

@Stateless
public class UserServiceImpl implements UserService {

    public User findUser(String username, String password) {
        // some code
    }
}

除非您打算以某种客户端库或 API 的形式共享接口,否则不要使用它们。在单个模块中使用它们没有意义。最新 Java EE 版本强调简单、无样板代码 - 代码越少越好。值得注意的例外是 CDI 替代方案,但这是一个特殊的用例,与接口实现的 ,old java ee'' 模式非常不同。 如果您有基于 java 的客户端,我认为唯一的例外是 JAXRS 端点定义。然后将 Rest 接口和 DTO 放入 API 模块并在客户端和后端服务提供商之间共享它是有用的(想想微服务通信,或前端后端)。但是,如果您的客户不是 java,请不要理会它,只需注释 bean 本身即可。