#java #logging #methods #reflection #reflections
Вопрос:
Я хотел бы создать новую аннотацию для имени метода регистрации и значения параметра метода.
Я использую приведенный ниже код для извлечения информации о параметрах метода без использования «отражения java» (потому что это слишком дорого).
public void method1(String param1) {
Method method = new Object() {}.getClass().getEnclosingMethod();
System.out.printf(method.getName() " : ");
Parameter[] parameters = method.getParameters();
for (Parameter parameter : parameters) {
System.out.printf(parameter.toString());
}
}
его выход составляет :
метод1 : java.lang.Строка arg0
Здесь я получаю тип параметра и его имя. Я хочу получить значение параметра
Я попробовал @Loggable аннотацию https://aspects.jcabi.com/ и это не работает.
@Регистрируемые ссылки: (https://aspects.jcabi.com/annotation-loggable.html) (https://aspects.jcabi.com/apidocs-0.22.6/com/jcabi/aspects/Loggable.html)
Комментарии:
1. Это невозможно с помощью размышления. Вы получаете доступ к определению метода. Определение метода ничего не говорит о каком-либо конкретном вызове.
2.Это странный вопрос. Все, что делает ваш код, в первую очередь
getClass().getEnclosingMethod()
, иmethod.getParameters()
является отражением. Если это не Отражение, то что же тогда вы называете Отражением? Если вы хотите найти решение действительно без размышлений,System.out.println("method1: param1=" param1);
сделайте свою работу.3. Почти уверен, что то, как вы пытаетесь это сделать, совершенно невозможно. Вероятно, вам придется сделать это, повозившись с байт-кодом.
4. Ну, хотя это и не «невозможно», это потребует использования некоторых скрытых, неподдерживаемых API . И написание агента Java проще и лучше поддерживается. Это также, вероятно, повысит производительность.
5. Аннотации ничего не делают. Аннотации подобны параметрам или записям в файле конфигурации. Вам нужно реальное программное обеспечение, например, процессор аннотаций, который выполняет эту работу.