Java 8默认接口方法上的Spring Integration @ServiceActivator

前端之家收集整理的这篇文章主要介绍了Java 8默认接口方法上的Spring Integration @ServiceActivator前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我想在Java 8默认接口方法上使用@ServiceActivator注释.此默认方法将根据业务规则委托此接口的另一个方法.

@H_404_5@public interface MyServiceInterface { @ServiceActivator public default void onMessageReceived(MyPayload payload) { if(payload.getAction() == MyServiceAction.MY_METHOD) { ... myMethod(...); } } public void myMethod(...); }

然后,此接口由Spring @Service类实现:

@H_404_5@@Service public class MyService implements MyServiceInterface { public void myMethod(...) { ... } }

执行代码时,这不起作用!

我只能从默认方法删除@ServiceActivator注释,并在我的@Service类中覆盖该默认方法并委托给super方法

@H_404_5@@Service public class MyWorkingService implements MyServiceInterface { @ServiceActivator @Override public void onMessageReceived(MyPayload payload) { MyServiceInterface.super.onMessageReceived(payload); } public void myMethod(...) { ... } }

覆盖默认方法会忽略默认方法的用途.

是否有其他方式以干净的方式实现此方案?

最佳答案
这现在不起作用,因为Spring Integration依赖于ReflectionUtils.doWithMethods,它使用ReflectionUtils.getDeclaredMethods,最后一个只执行clazz.getDeclaredMethods(),它不返回接口上的那些默认方法.

随意提出针对Spring Framework的JIRA问题以考虑该选项.

与此同时,除非重写该方法,否则没有其他选择.

猜你在找的Spring相关文章