170 похожих чатов

Всем привет, я через AOP могу получить аргументы метода контроллера

joinPoint.getArgs. Но могу ли я наоборот установить аргумент? Например я хочу чтобы в аргументе не было явно написано HttpServletRequest httpServletRequest, ведь мы далеко не всегда его используем в методе. Но хотелось бы логировать каждый метод и получать его тип запросa. Может можно сделать такую аннотацию, которая инжектит неявно аргумент в метод

34 ответов

7 просмотров

https://stackoverflow.com/a/4312242/6277184

Javist- Автор вопроса
Peter P.
https://stackoverflow.com/a/4312242/6277184

java.lang.IllegalArgumentException: Expecting 0 arguments to proceed, but was passed 1 arguments https://pastebin.com/86FzfXrx

Кто-то переизобретает имплиситы из скалы, я смотрю

Javist- Автор вопроса
Denis Chikanov
Кто-то переизобретает имплиситы из скалы, я смотрю

да не в скале имплиситы это ж фича языка, а тут хочется вытащить из @RequestMapping метода HttpServletRequest, не добавляя его в параметр каждого контроллерного метода)

Javist
да не в скале имплиситы это ж фича языка, а тут хо...

Ну не добввляй если не юзаешь в чем трабл

Javist- Автор вопроса
Islam Yusubov
Ну не добввляй если не юзаешь в чем трабл

так я делаю аспект, который читает из request'ов инфу и логирует

Javist
так я делаю аспект, который читает из request'ов и...

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

Javist- Автор вопроса
Javist
мб и так, пошел куда-то не туда видимо хД

Тебе какие-нибудь интерсепторы нужны, а не аспекты

Javist- Автор вопроса
Javist
да не в скале имплиситы это ж фича языка, а тут хо...

тебе не надо делать параметры, тебе надо заинжектить HttpServletRequest в сам аспект.

Dmitriy Zanin
тебе не надо делать параметры, тебе надо заинжекти...

@Component @Aspect @RequiredArgsConstructor public class AspectTest { private final HttpServletRequest httpServletRequest; @Before("@annotation(ru.TestAspect)") public void proceed() { System.out.println(httpServletRequest.getRequestURI()); } }

Javist- Автор вопроса
Dmitriy Zanin
@Component @Aspect @RequiredArgsConstructor public...

Тоесть по идее в анотированный метод будет заинжекчен реквест? Немного запутался

Javist
Тоесть по идее в анотированный метод будет заинжек...

ты ставишь аннотацию своего аспекта над методом в RestController классе. описываешь аспект примерно как я описал выше, только со своими потребностями и инжектишь в класс обработки аспекта HttpServletRequest. Только не вздумай маркировать своей аннотацей методы, которые не имеют http конеткста

Javist- Автор вопроса
Dmitriy Zanin
ты ставишь аннотацию своего аспекта над методом в ...

Да , как делать то я понимаю, не очень понимаю как этот реквест попадет в контроллер метод) выглядит будто он останется просто в аспект бине )

Javist
Да , как делать то я понимаю, не очень понимаю как...

я видимо не понимаю чего ты хочешь 🙂 зачем тебе его в контроллер метод?

Javist- Автор вопроса
Javist
Чтобы залогировать инфу о нем)

очень абсратное требование конечно. Ты хочешь прямо в контроллере описывать логику логирования? Или ты для этого создал аспект и в нем логируешь?

Javist- Автор вопроса
Dmitriy Zanin
очень абсратное требование конечно. Ты хочешь прям...

Да для него) анноташка, которая будет логировать методы

Dmitriy Zanin
очень абсратное требование конечно. Ты хочешь прям...

Он создал аспект, где хочет логировать хттпреквест, но не хочет, чтобы в методах, с которыми будет работать этот аспект, этот иеквест был параметром

Denis Chikanov
Он создал аспект, где хочет логировать хттпреквест...

ты сменил аватар, я тебя не узнал 🙂 дак я же вроде проедложил нормальное решение?

Dmitriy Zanin
ты сменил аватар, я тебя не узнал 🙂 дак я же вроде...

Логика подсказывает, что реквестов много разных, а поле реквеста у тебя private final - каждый раз экземпляр создавать на новый реквест (и допрет ли спринг до такого?), получается?

Denis Chikanov
Логика подсказывает, что реквестов много разных, а...

да, спринг туда каждый раз подставляет конкретный текущий реквест

Denis Chikanov
Кто-то переизобретает имплиситы из скалы, я смотрю

Разве имплиситы - не сингтоны на этапе компиляции? H...Request впротивовес имеет жизненный цикл запроса

Javist
Последовательно?

какой вызывается, тот и заинжектится. это же синхронный вызов

Javist
Последовательно?

Ты точно понимаешь, что из себя аспекты представляют?

Denis Chikanov
И новый экземпляр аспекта каждый раз?

/api/test api/test1 дернул две апи, маркированные аспект аннотацией - результат разный. Да, на каждый вызов свой инжект. К слову, когда мы ставим параметром хттпРеквест в методе контроллера, он туда тоже инжектится же? или не?

Javist- Автор вопроса
Javist- Автор вопроса
Denis Chikanov
Ты точно понимаешь, что из себя аспекты представля...

Ну не знаю, что ты имеешь ввиду «представляет»?)

Dmitriy Zanin
/api/test api/test1 дернул две апи, маркированные ...

Я не знаю, как у спринга веб-составляющая под капотом устроена, но я бы сказал "просто подставляется как аргумент", DI тут вроде не при делах, по крайней мере, не обязан участвовать.

Denis Chikanov
Логика подсказывает, что реквестов много разных, а...

Объект реквеста это бин в request scope, инжектится прокси, внутри будет текущий запрос из контекста

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

Обсуждают сегодня

Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
40
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
27
В чем сила брат, в NASM или FASM?
Isaac Kleiner
18
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
11
Хтось використовував Vapor на Windows?
Jaroshevskii
15
Тут кста кто-нибудь NeoVim использует?
Simple Sorcerer
13
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
у меня вопрос на счет .global <name> для чего это нужно если я пишу на ассемблере? только для того что бы сделать это видимым для линкера? вот что написано в докумментации GA...
Simple Sorcerer
1
Карта сайта