Возможно ли ввести какой-либо код перед вызовом метода с помощью 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.