Использование AOP уже хороший ответ, это была и моя первая идея.
Я попытался найти хороший способ сделать это без AOP, и пришел к этой идее (используя шаблон Decorator):
interface I {
String method1();
String method2();
...
String methodN();
}
class IDoSomethingDecorator implements I {
private final I contents;
private final Runnable commonAction;
IDoSomethingDecorator(I decoratee, Runnable commonAction){
this.contents = decoratee;
this.commonAction = commonAction;
}
String methodi() {
this.commonAction().run();
return contents.methodi();
}
}
Затем вы можете украсить конструкцию A (которая реализует I):
I a = new IDoSomethingDecorator(new A(),doSomething);
Это в основном не ракетостроение, и на самом деле это приводит к большему количеству кода, чем ваша первая идея,но вы можете ввести общее действие и отделить дополнительное действие от самого класса А.Кроме того, вы можете легко отключить его или использовать, например, только в тестах.