@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(...) {
...
}
}
デフォルト メソッドをオーバーライドすると、デフォルト メソッドの目的が無視されます。
このシナリオをクリーンな方法で実装する別の方法はありますか?