Вы можете рассмотреть возможность использования динамических прокси для реализации уровня обслуживания.
Он использует API отражения, поэтому все вызовы методов для вашего кода сервиса будут проходить через один метод "invoke", где вы можете регистрировать вызовы служб, параметры методов и сообщения об исключениях.
public class MyServiceProxy implements InvocationHandler {
public static Object newInstance(Object obj) {
return java.lang.reflect.Proxy.newProxyInstance(
obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(),
new MyServiceProxy(obj));
}
public Object invoke(Object proxy, Method m, Object[] args) {
// Log method name , parameters etc.
try {
method.invoke(proxy, args) ;
}
catch(InvocationTargetException e) {
// log your exceptions and do other things
throw e.getTargetException();
}
}
Где бы вы ни позвонили в службу, вы бы вместо этого сделали это
MyService myServiceRef = (MyService)MyServiceProxy.newInstance(new MyService());