Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring:如何在不同的应用程序中共享服务_Spring_Architecture - Fatal编程技术网

Spring:如何在不同的应用程序中共享服务

Spring:如何在不同的应用程序中共享服务,spring,architecture,Spring,Architecture,我们目前正在开发一个富应用程序,在客户端使用Eclipse,在服务器端使用Spring框架 我的挑战是通过在不同的应用程序上共享相同的业务功能(服务)来减少实现工作。这些业务功能(例如,文档管理上下文中的签入/签出服务)可以具有不同的特征(例如,签入本身是相同的,但在一个应用程序中,文件在签入后被删除,而另一个应用程序将不执行任何操作)。 在这种情况下,我可以复制并粘贴所有代码,并使其适应新的需求,或者我会找到另一个很好的解决方案(例如,代码重用和回调等),以减少loc和维护工作 你有过这种情况

我们目前正在开发一个富应用程序,在客户端使用Eclipse,在服务器端使用Spring框架

我的挑战是通过在不同的应用程序上共享相同的业务功能(服务)来减少实现工作。这些业务功能(例如,文档管理上下文中的签入/签出服务)可以具有不同的特征(例如,签入本身是相同的,但在一个应用程序中,文件在签入后被删除,而另一个应用程序将不执行任何操作)。 在这种情况下,我可以复制并粘贴所有代码,并使其适应新的需求,或者我会找到另一个很好的解决方案(例如,代码重用和回调等),以减少loc和维护工作

你有过这种情况的经验吗?Spring是否在一个平台上为这种多应用程序方法提供了任何解决方案?

当然,事实上Spring(通常是IoC)就是为这种解决方案而设计的。第一个技术步骤:将假定要共享的服务提取到一个库中,您可以将其放到不同的项目中

现在有趣的部分是:如果一些逻辑不同,而其他逻辑保持不变,那么使用依赖注入和策略模式

现在创建两个独立的
CheckInCleanup
接口实现,每个应用程序都不同。一个删除文件,另一个什么也不做。在一种应用中,前者将被注入,后者将被注入第二种应用
CheckInCleanup
是库的一部分,包括
CheckInService
,但实现是本地的。Spring将在启动时提取并自动注入

此外,您刚刚引入了良好的关注点分离和增强的可测试性。

当然,事实上Spring(通常是IoC)是为此类解决方案而设计的。第一个技术步骤:将假定要共享的服务提取到一个库中,您可以将其放到不同的项目中

现在有趣的部分是:如果一些逻辑不同,而其他逻辑保持不变,那么使用依赖注入和策略模式

现在创建两个独立的
CheckInCleanup
接口实现,每个应用程序都不同。一个删除文件,另一个什么也不做。在一种应用中,前者将被注入,后者将被注入第二种应用
CheckInCleanup
是库的一部分,包括
CheckInService
,但实现是本地的。Spring将在启动时提取并自动注入


此外,您刚刚引入了良好的关注点分离和增强的可测试性。

因此,您建议使用不同的应用程序上下文开发单独的应用程序,等等。?我的第一个想法是在运行时使用IoC在一个上下文中运行所有内容-在您看来,这是一个好方法吗?您有应用程序a和B,您希望在其中重用相同的服务。将
CheckInService
CheckInCleanup
提取到JAR库中,并将其包含在a和B中。在a和B中,都有不同的
CheckInCleanup
实现。是的,我假设A和B都使用Spring,但是你可以不使用Spring而轻松地在其中一些应用程序中手动执行IoC。因此,你建议使用不同的应用程序上下文开发单独的应用程序,等等。?我的第一个想法是在运行时使用IoC在一个上下文中运行所有内容-在您看来,这是一个好方法吗?您有应用程序a和B,您希望在其中重用相同的服务。将
CheckInService
CheckInCleanup
提取到JAR库中,并将其包含在a和B中。在a和B中,都有不同的
CheckInCleanup
实现。是的,我假设A和B都使用Spring,但是您可以很容易地在没有Spring的情况下使用它们中的一些来手动执行IoC。
@Service
public class CheckInService {

  @Resource
  private CheckInCleanup checkInCleanup;

  public void checkIn(Doc doc) {
    //...
    checkInCleanup.checkIn(doc)
  }
}