是否返回包含Spring事件的对象?

lc8prwob  于 2022-11-21  发布在  Spring
关注(0)|答案(2)|浏览(98)

我从需要调用module_B服务的地方添加了module_A服务。目的是使耦合最小化。
1.方法1:-这是我们通常使用的方法。module_B将被注入到module_A之下,并从service_A调用service_B。但它将module_B与module_A紧密耦合。
1.**方法2:-**Spring事件,如this example。使用此方法,侦听器可以位于module_A中。例如:-我需要从module_B调用module_A(EmployeeService.findEmployee(int id))。我可以做的是创建EmployeeFinderCustomEvent,其中将包含employeeId。事件将从module_B发布。
EmployeeFinderCustomEventListener将位于module_A下并找到雇员。但我需要从侦听器返回Employee对象,该对象应返回给module_B调用服务。但onApplicationEvent返回类型为void。

@Override
        public void onApplicationEvent(EmployeeFinderCustomEvent cse) {
            // find employee
        }

如何将对象从spring事件侦听器返回给调用者以实现松散耦合?

oyxsuwqo

oyxsuwqo1#

应用程序事件并不是以这种方式工作的。
您可以将EmployeeService接口放置在A和B都依赖的单独模块中,并将实现(EmployeeServiceImpl或其他)保留在模块A中。此解决方案将不要求模块B依赖于模块A。

mgdq6dx1

mgdq6dx12#

例外状况是从事件取得回应的一种方式。
如果你在模块之间传递一个验证事件,那么如果验证失败,你可以抛出一个异常,并从异常中获取任何数据。

相关问题