如何在没有服务包装器的情况下覆盖 liferay 7 中的 UserLocalServiceImpl?

How to override UserLocalServiceImpl in liferay 7 without service wrapper?

我为 UserLocalServiceImpl 创建了服务包装器,并在服务包装器中声明了一个新方法。但是当我使用 UserLocalServiceUtil 显式调用该方法时,编译器无法解析该方法。所以,请帮助我并告诉我如何覆盖 UserLocalServiceImpl 以便我可以在其中定义新方法。提前谢谢..

你可以做到

UserLocalServiceUtil.getService()

然后将结果转换为您的自定义包装器类型。然后你应该可以调用新方法了。

这行不通。您将更改 Liferay 已发布的 API 的界面,并且基本上与任何其他假定 Liferay 的 API.

的插件不兼容

虽然从技术上讲您可以访问 Liferay 的所有源代码并且可以构建 Liferay 的修改版本,但引入此更改意味着没有市场插件(使用 UserLocalService)与您的兼容定制版。任何 OSGi 组件都可以挂接到 Liferay 并进入已发布 API 的调用堆栈,没有 OSGi 插件可以扩展已发布的接口,因此原始接口比 Liferay 已发布的 API.

如果您依赖单独的函数调用,您可以做的最好的事情是:创建调用 UserLocalService.

的自定义服务

此外,在 Liferay 7 中,您不应再使用 UserLocalServiceUtil,而是通过 @Reference 注释正确注入服务依赖项。 *LocalServiceUtil 类 纯粹是为了向后兼容,只能用于 *.WAR 风格的插件。