Как настроить исполнителя для вызова метода пружинного выражения для выполнения пользовательского кода - PullRequest
0 голосов
/ 13 марта 2019

Возможно ли ввести какой-либо код перед вызовом метода с помощью spel?

Я бы хотел установить переменную ThreadLocal в зависимости от объекта HttpServletRequest. В настоящее время из-за отсутствия необходимой инициализации я получаю исключение.

at eu.littera.re.core.common.i18n.I18n$ClientLanguageSlotCache.getSlot(I18n.java:69)
at eu.littera.re.core.common.i18n.I18n.getLocaleText(I18n.java:271)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.expression.spel.support.ReflectiveMethodExecutor.execute(ReflectiveMethodExecutor.java:117)
at org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:133)
at org.springframework.expression.spel.ast.MethodReference.access$000(MethodReference.java:51)
at org.springframework.expression.spel.ast.MethodReference$MethodValueRef.getValue(MethodReference.java:372)
at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:88)
at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:121)

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

I18n

называется (I18n.getLocaleText)

Может быть, я могу добавить какого-нибудь специального исполнителя заклинаний?

Обновление 2019-03-19: У меня есть JSP-страницы, использующие пользовательский тег, который выполняет это выражение:

<spring:eval expression="@i18n.getLocaleText(
            value,
            @requestUtils.getClientId(),
            @requestUtils.getLocale()
            )"
            var="outVariable"
        />

С другой стороны, у меня есть класс бинов I18n.java, который реализует метод getLocaleText . Теперь я хотел бы обернуть метод-вызов из тега и вызвать некоторый код заранее.

Точно так же, как весной мы можем написать Interceptors и Filter для обработки запросов.

В качестве альтернативы я мог бы просто написать другой метод, такой как getLocaleTextForJsp , где я делаю обертывание самостоятельно. Это, однако, делает важным не забывать, какой метод использовать в JSP.

...