我想在Java 8默认接口方法上使用@ServiceActivator注释.此默认方法将根据业务规则委托此接口的另一个方法.
public interface MyServiceInterface {
@ServiceActivator
public default void onMessageReceived(MyPayload payload) {
if(payload.getAction() == MyServiceAction.MY_METHOD) {
...
myMethod(...);
}
}
public void myMethod(...);
}
然后,此接口由Spring @Service类实现:
@Service
public class MyService implements MyServiceInterface {
public void myMethod(...) {
...
}
}
执行代码时,这不起作用!
我只能从默认方法中删除@ServiceActivator注释,并在我的@Service类中覆盖该默认方法并委托给super方法:
@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问题以考虑该选项.
与此同时,除非重写该方法,否则没有其他选择.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。