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

我发现在MVC模式中,主要有4个类;控制器、服务、服务 impl 和存储库。

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

Service接口

Service{

public void someMethod();

}

ServiceImpl

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

   }    
 }

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

@Autowired 
Service service;

Object obj =  service.someMethod();

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


答案 1

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

服务实现应该是一个Spring Bean(它必须具有或注释,或者应该在Spring XML配置文件中定义),以便Spring可以在Spring应用程序上下文中找到它并注册它。@Component@Service

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

有关依赖注入如何与Spring:IoC容器配合使用的信息,请参阅Spring框架参考文档


答案 2

拥有这种架构背后的基本思想与春季惯例几乎没有什么不同。

假设明天您决定,您不希望两个项目都有一个应用程序,而是进入一个webapp部署和另一个服务部署 示例UserService WebApp

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

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

你的回答:你可以直接参考ServiceImpl,它会服务于目的,区别仅在ServiceImpl不是当前模块的一部分或任何依赖项时,但最终捆绑项目将通过一些兄弟模块来实现可能


推荐