【发布时间】:2015-05-18 12:35:59
【问题描述】:
我想在 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 类中覆盖该默认方法并委托给超级方法:
@Service
public class MyWorkingService implements MyServiceInterface {
@ServiceActivator
@Override
public void onMessageReceived(MyPayload payload) {
MyServiceInterface.super.onMessageReceived(payload);
}
public void myMethod(...) {
...
}
}
覆盖默认方法会忽略默认方法的用途。
有没有其他方法可以干净利落地实现这个场景?
【问题讨论】:
标签: java spring java-8 spring-integration default-method