powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring AOP получить в аспекте доступ по имени параметра
17 сообщений из 17, страница 1 из 1
Spring AOP получить в аспекте доступ по имени параметра
    #38380724
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как реализовать в аспекте доступ к параметру по имени параметра, которое можно получить из аннотации. Т.е. хочется реализовать функциональность доступную в SPEL, когда можно обращаться к параметру через "#имяпараметра".

Например,


Код: java
1.
2.
3.
4.
@MyAnnotation(nameParam="obj1")
publuc void service(MyObject obj1, MyObject2 obj2) {
...
}



Элементы массивов CodeSignature.getParameterNames() и JoinPoint.getArgs() упорядочены по порядку следования аргументов в сигнатуре метода? У меня не было возможности проверить такое решение, другого пока не могу найти.
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38381297
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
rdm,

Повесьте аннотацию непосредственно на параметры. Например, так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
publuc void service(@NamedParam("obj1") MyObject obj1, 
                    @NamedParam("obj2") MyObject2 obj2) {
...
}

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public static @interface NamedParam {
    String value();
}
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38381610
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA, Этот вариант мне не подходит( Я могу в аспекте получить значение аннотации, которое соответствует названию параметра. Но вот как получить сам параметр в аспекте по его имени пока не могу понять.
Вызов Signature.getParameterNames() у меня возвращает null.
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38382056
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
rdmWGA, Этот вариант мне не подходит( Я могу в аспекте получить значение аннотации, которое соответствует названию параметра. Но вот как получить сам параметр в аспекте по его имени пока не могу понять.
Вызов Signature.getParameterNames() у меня возвращает null.А AspectJ - это круто :-)
Не использовал раньше, а сейчас так вообще JavaEE-интерцепторы в ходу - там имя параметра вообще не вытащить, а AspectJ умеет. Накидал минимальный пример со Spring + AspectJ. Посмотрите, сравните со своим кодом.
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38382451
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA, ваш пример полностью работает. Не могу понять почему у меня String[] parameterNames = signature.getParameterNames() возвращает null. В документации сказано, что при компиляции надо установить уровень debuglevel = vars и debug=on, но в вашем примере в pom.xml ничего такого не обнаружил, при этом пример работает. Что-то я не так делаю, но не могу найти что именно)
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38382488
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том, что в вашем примере вы получаете ссылку на класс, а не на интерфейс. Из-за этого используется не JDKDinamicProxy, а CGlib. Если чуть изменить ваш пример

Код: java
1.
2.
3.
4.
@Service
public class TestService implements TestServiceInterface {
...
}



получается та же ошибка что и у меня, метод signature.getParameterNames() возвращает null.
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38382500
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может вы знаете, как получать ссылку на интерфейс, использовать dinamicProxy и чтобы это работало? )
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38382502
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я чуть переделал ваш пример, вот:
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38382823
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
rdm,

Да, с интерфейсами ситуация другая. Что-то похожее мне нагуглилось в первых двух ссылках.

Кстати, Вы не обращали внимание, что разные IDE, когда создают реализацию стандартных интерфейсов (например, HttpServlet), для параметров методов используют разные идентификаторы? ;) Похоже, они их сами "выдумывают"...
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38382828
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA, Гугл же разные результаты выдает для разных пользователей) У меня проблема усугубилась, теперь даже JoinPoint.getArgs() всегда null возвращает (
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38382847
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
rdmWGA, Гугл же разные результаты выдает для разных пользователей) У меня проблема усугубилась, теперь даже JoinPoint.getArgs() всегда null возвращает (Но не у двух джавистов жеж )
Я про эти ссылки: тынц1 и тынц2 .
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38382901
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA, я пробовал, у меня не заработало
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38382915
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
rdmWGA, я пробовал, у меня не заработалоЕсли я правильно понял, то и не заработает. Какие-то особенности JVM, из-за которых для интерфейсов не сохраняется инфа об именах параметров.
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38382946
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA, решение в любом случае есть. Очень много аннотации Spring используют имена параметров в SPEL.
Например Spring Security позволяет обращаться к параметрам по имени #имяпараметра. Причем все это работает на реализации интерфейса.
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38382960
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
rdmWGA, решение в любом случае есть. Очень много аннотации Spring используют имена параметров в SPEL.
Например Spring Security позволяет обращаться к параметрам по имени #имяпараметра. Причем все это работает на реализации интерфейса.Тогда Вы знаете больше меня. Но зачем столько усилий? Возможно есть другой способ сделать или workaround какой
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38382971
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA, это удобно и наглядно. Пока я использую просто порядковый номер в аннотации int key = 0,1,2...
...
Рейтинг: 0 / 0
Spring AOP получить в аспекте доступ по имени параметра
    #38384990
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никто не знает?
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring AOP получить в аспекте доступ по имени параметра
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]