服务接口和服务实现类spring的代码架构

新手上路,请多包涵

我发现在 MVC 模式中,主要有 4 个类;控制器、服务、服务实现和回购。

服务是一个接口,服务实现实现服务类并包含所有逻辑代码。结构类似于:-

Service 接口

Service{

public void someMethod();

}

ServiceImpl

 ServiceImpl implements Service{
  public void someMethod(){
   //do something

   }
 }

但是当我们想从控制器访问服务实现代码时,我们将服务类的方法调用为:-

 @Autowired
Service service;

Object obj =  service.someMethod();

控制器如何执行 ServiceImpl 类的代码

原文由 viper 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 998
2 个回答

这基本上是 Spring 的工作原理:

服务实现应该是一个 Spring bean(它必须有一个 @Component@Service 注释,或者应该在 Spring XML 配置文件中定义),这样 Spring 就会找到它并将其注册到 Spring 应用程序上下文中。

然后使用依赖注入,通过 @Autowired 注释,将服务的实现注入到控制器中。这意味着 Spring 将查看您的控制器,它将在 service 成员变量上找到 @Autowired 注释,并使用它在应用程序上下文中找到的 bean 对其进行初始化,这将是它先前注册的服务实现类的实例。因此,在 Spring 完成后, service 将引用 ServiceImpl 的实例。

有关依赖注入如何与 Spring 一起工作的信息,请参阅 Spring Framework 参考文档: IoC 容器

原文由 Jesper 发布,翻译遵循 CC BY-SA 3.0 许可协议

这种架构背后的基本思想与 spring 约定略有不同。

假设明天您决定,您不想为两个项目都使用一个应用程序,并为 webapp 部署一个,为服务部署另一个 Example UserService WebApp

因此,要让 WebApp 连接到 UserService,它必须发出 http 请求以获取任何类型的数据。那么您将不得不更改所有 WebApp 代码以使其与新更改兼容。例如,您将调用 httpClient 而不是直接调用服务的方法。为了避免这种返工,你可以做的是,使用接口服务你实现你自己的 ServiceImpl 并在那里发出所有 http 请求,其余部分保持不变。

类似的事情将在 UserService 中完成,它将像以前一样拥有自己的 ServiceImpl,但将在 Controller 中作为单例对象调用。

您的回答:您可以直接引用 ServiceImpl,它会达到目的,区别仅当 ServiceImpl 不是当前模块或任何依赖项的一部分时,但最终捆绑项目可能会通过某个兄弟模块实现它

原文由 LNT 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题