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

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

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

34 ответов

17 просмотров

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, инжектится прокси, внутри будет текущий запрос из контекста

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта