Я хочу использовать аннотацию @ServiceActivator
по методу интерфейса по умолчанию Java 8. Этот метод по умолчанию будет делегировать другой метод этого интерфейса в зависимости от бизнес-правил.Spring Integration @ServiceActivator для метода интерфейса по умолчанию Java 8
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(...) {
...
}
}
Переопределение метода по умолчанию пренебрегает назначение метода по умолчанию.
Есть ли другой способ реализовать этот сценарий в чистом виде?
Поднял вопрос JIRA https://jira.spring.io/browse/INT-3676 –
Как я уже сказал, это проблема с SF, поэтому перешел в соответствующий проект: https://jira.spring.io/ просмотр/SPR-12822 –
Последующие действия: он был установлен весной 4.2 RC1 –