2012-02-12 4 views
6

Начну с куском кодаАннотация который вызывает метод

class Clazz { 

    public void doSomething() { 
     ... 
     check(); 
    } 

    public void doSomethingElse() { 
     ... 
     check(); 
    } 

    ... // etc., these methods look basically the same - they all call check() at the end 
} 

Можно ли комментировать такие методы, как @Checked, которые могли бы привести назвать check() в конце? И если да, можете ли вы привести несколько примеров?

+1

Невозможно легко. Но вопрос в том, что бы вы получили, кроме путаницы? –

+0

@JBNizet Я просто хочу знать, если это возможно, и если нет, я узнаю что-то новое. Моя реальная проблема намного сложнее, и я надеюсь, что смогу ее упростить. – user219882

ответ

6

Да, это возможно. Вам необходимо настроить код, как правило, с помощью аспектов (AOP). Проверьте this example, если вы хотите посмотреть, как он выглядит.

+0

Ваш ответ неправильный, ваш «вызов вашего метода» будет выполняться только при отображении класса, а не при вызове метода. Вы можете использовать Instrumentation для этой цели (https://github.com/jboss-javassist/javassist) или обернуть свой код в сгенерированных методах (например, https://github.com/square/javapoet) – Spoke44

+0

@ Spoke44 you ' re право. Думаю, я, должно быть, неправильно понял этот вопрос. Я не уверен, почему он был принят и получил больше оборотов, чем правильный ответ. – javamonkey79

3

Это можно сделать с помощью АОП. Взгляните на AspectJ и Dynamic Proxy. Используя динамический прокси, вы можете обернуть свой класс еще одним фрагментом кода, который выполняет некоторые действия до и после вызова фактического метода.

+0

Не могли бы вы поделиться каким-то примером или ссылкой о том, как это можно достичь с помощью AspectJ/Dynamic Proxy? –

+0

@KiranAB, только для вас http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html – AlexR

Смежные вопросы