Java - создать обработчик вызова? - PullRequest
1 голос
/ 05 декабря 2011

Я пытаюсь реализовать фабричный класс, который генерирует объекты и перехватывает все открытые методы.

Я пытаюсь вызвать 2 метода здесь.1: уже вызванный метод 2: метод в моей базе.Любая идея, как я могу достичь этого?

public class LoggerFactory {


    public LoggerFactory() {
    }

        // Clazz is always a class inheriting from Loggable
    public Object newInstance(Class clazz) {
        return Proxy.newProxyInstance(clazz.getClassLoader(), new Class[] {clazz}, handler);
    }

    private InvocationHandler handler = new InvocationHandler() {

        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            // Call logStartingTime on object

            // Call invoked method on object

            // Call logEndingTime on object

            return null;
        }
    };
}

Мой класс Аннотация:

public abstract class Loggable {

       void logStartingTime() {
          log.info(“start time = ” + new Date());
          // also log some info about the state of the object
       }

       void logEndingTime() {
          log.info(“ending time = ” + new Date());
           // also log some info about the state of the object
       }
}

Ответы [ 2 ]

3 голосов
/ 05 декабря 2011

Я полагаю, что вы могли бы достичь этого с AspectJ .

2 голосов
/ 05 декабря 2011

Класс Proxy поддерживает только интерфейсы прокси, а не классы.

CGLib имеет возможность создавать прокси из классов и делать то, что вам нужно.Пример Beans может послужить хорошей отправной точкой.

...