Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring AOP получить в аспекте доступ по имени параметра / 17 сообщений из 17, страница 1 из 1
29.08.2013, 11:12:47
    #38380724
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP получить в аспекте доступ по имени параметра
Как реализовать в аспекте доступ к параметру по имени параметра, которое можно получить из аннотации. Т.е. хочется реализовать функциональность доступную в SPEL, когда можно обращаться к параметру через "#имяпараметра".

Например,


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



Элементы массивов CodeSignature.getParameterNames() и JoinPoint.getArgs() упорядочены по порядку следования аргументов в сигнатуре метода? У меня не было возможности проверить такое решение, другого пока не могу найти.
...
Рейтинг: 0 / 0
29.08.2013, 15:51:16
    #38381297
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP получить в аспекте доступ по имени параметра
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
29.08.2013, 18:52:18
    #38381610
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP получить в аспекте доступ по имени параметра
WGA, Этот вариант мне не подходит( Я могу в аспекте получить значение аннотации, которое соответствует названию параметра. Но вот как получить сам параметр в аспекте по его имени пока не могу понять.
Вызов Signature.getParameterNames() у меня возвращает null.
...
Рейтинг: 0 / 0
30.08.2013, 10:57:25
    #38382056
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP получить в аспекте доступ по имени параметра
rdmWGA, Этот вариант мне не подходит( Я могу в аспекте получить значение аннотации, которое соответствует названию параметра. Но вот как получить сам параметр в аспекте по его имени пока не могу понять.
Вызов Signature.getParameterNames() у меня возвращает null.А AspectJ - это круто :-)
Не использовал раньше, а сейчас так вообще JavaEE-интерцепторы в ходу - там имя параметра вообще не вытащить, а AspectJ умеет. Накидал минимальный пример со Spring + AspectJ. Посмотрите, сравните со своим кодом.
...
Рейтинг: 0 / 0
30.08.2013, 15:11:32
    #38382451
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP получить в аспекте доступ по имени параметра
WGA, ваш пример полностью работает. Не могу понять почему у меня String[] parameterNames = signature.getParameterNames() возвращает null. В документации сказано, что при компиляции надо установить уровень debuglevel = vars и debug=on, но в вашем примере в pom.xml ничего такого не обнаружил, при этом пример работает. Что-то я не так делаю, но не могу найти что именно)
...
Рейтинг: 0 / 0
30.08.2013, 15:24:51
    #38382488
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP получить в аспекте доступ по имени параметра
Дело в том, что в вашем примере вы получаете ссылку на класс, а не на интерфейс. Из-за этого используется не JDKDinamicProxy, а CGlib. Если чуть изменить ваш пример

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



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

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

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


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