我从需要调用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事件侦听器返回给调用者以实现松散耦合?
2条答案
按热度按时间oyxsuwqo1#
应用程序事件并不是以这种方式工作的。
您可以将
EmployeeService
接口放置在A和B都依赖的单独模块中,并将实现(EmployeeServiceImpl
或其他)保留在模块A中。此解决方案将不要求模块B依赖于模块A。mgdq6dx12#
例外状况是从事件取得回应的一种方式。
如果你在模块之间传递一个验证事件,那么如果验证失败,你可以抛出一个异常,并从异常中获取任何数据。