Как я могу автоматически зарегистрировать использование какого-либо @Deprecated annoted метод в Java?

Я в настоящее время использую slf4j сверху log4j для входа. Я хотел бы автоволшебно зарегистрировать любое использование устаревшего метода (аннотируемый стандартом @Deprecated аннотация) в моем коде.

Там какой-либо простой способ состоит в том, чтобы сделать это?

5
задан temsa 4 March 2010 в 16:19
поделиться

4 ответа

Если вы хотите регистрировать каждое использование, вам, вероятно, придется использовать AOP . Это зависит от того, какие фреймворки вы используете, если есть простой способ сделать это. Вот как это может выглядеть в Spring :

public class DeprecatedLoggerAdvice implements MethodInterceptor
{
    private Logger log = LoggerFactory.getLogger(this.getClass());

    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable
    {
        Methode method = invocation.getMethod();
        Annotation[] annotations = method.getAnnotations();
        boolean isDeprecated = // Check it annotations has the deprecated one in here
        if(isDeprecated)
        {
            log.warn("Called deprecated method {}", method.getName());
        }
        invocation.proceed();
    }
}

Хотя, как уже упоминалось, это плохо сказывается на производительности. Если вы используете его в своем приложении, вам следует использовать этот подход в сочетании с модульными тестами, которые охватывают большую часть вашего кода. Затем вы можете зарегистрировать и удалить использование устаревших методов, а затем отключить AOP в производственном режиме.

4
ответ дан 14 December 2019 в 19:10
поделиться

Я не могу придумать простой способ сделать это, но вы можете использовать инструмент обработки аннотаций для создания кода, который регистрирует использование каждого устаревшего метода.

1
ответ дан 14 December 2019 в 19:10
поделиться

Думаю, вам будет жаль, если вы сделаете это во время выполнения. Конечно, вы можете использовать Aspect4J, чтобы добавить AOP pointcut к каждому методу, который ищет аннотации; но стоимость производительности будет высокой.

0
ответ дан 14 December 2019 в 19:10
поделиться

Вы можете, но это будет сложно. Единственное решение AFAIK для "обнаружения" вызовов методов - это использование AOP. В вашем случае вы можете написать аспект, который проверяет каждый вызов метода, проверяет, не устарел ли он, и регистрирует их.

Если вы используете spring, вы можете начать http://static.springsource.org/spring/docs/2.5.x/reference/aop.html

Пожалуйста, имейте в виду, что AOP имеет последствия для производительности и должен использоваться только после тщательного рассмотрения. Возможно, вы можете иметь флаг, который включает эту возможность в dev/qa окружении и отключает их в PROD

0
ответ дан 14 December 2019 в 19:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: