Далее в качестве примера рассматривается использование выражений Spring EL. При использовании других выражений следует учитывать различия в синтаксисе.
В @Cache можно установить ключ, который может быть строкой или выражением Spring EL, например:
@Cache(expire=600, key="'goods.getGoodsById'+#args[0]")
public GoodsTO getGoodsById(Long id){...}
Для удобства использования можно вызвать функцию hash для преобразования любого объекта в строку с помощью следующего метода:
@Cache(expire=720, key="'GOODS.getGoods:'+#hash(#args)")
public List<GoodsTO> getGoods(GoodsCriteriaTO goodsCriteria){...}
Сгенерированный ключ кэша будет иметь вид «GOODS.getGoods:xxx», где xxx — это значение args.
При объединении элементов ключа кэша рекомендуется разделять данные специальными символами, иначе ключ кэша может получиться беспорядочным. Например, если a = 1, b = 11, и не использовать специальные символы для разделения переменных, то значения будут одинаковыми, даже если поменять местами a и b.
Выражение Spring EL поддерживает изменение статических переменных и методов класса, таких как «T(java.lang.Math).PI».
Имя | Описание | Пример |
---|---|---|
args | Список параметров текущего вызываемого метода | #args[0] |
retVal | Возвращаемое значение после выполнения метода (действует только после выполнения метода, например, @Cache(opType=CacheOpType.WRITE), expireExpression, autoLoadCondition, @ExCache() | #retVal |
target | Текущий экземпляр, перехваченный AOP | #target |
Имя | Описание | Пример |
---|---|---|
hash | Преобразование объекта в уникальную строку хэша | #hash(#args) |
empty | Проверка, является ли объект пустым | #empty(#args[0]) |
Пользовательские функции можно зарегистрировать через AutoLoadConfig с помощью functions. Например:
<bean id="autoLoadConfig" class="com.jarvis.cache.to.AutoLoadConfig">
... ...
<property name="functions">
<map>
<entry key="isEmpty" value="com.jarvis.cache.CacheUtil" />
<!--#isEmpty(#args[0]) означает вызов метода isEmpty класса com.jarvis.cache.CacheUtil-->
</map>
</property>
</bean>
Вот несколько примеров механизмов вычисления выражений, найденных в интернете:
Тестирование производительности скриптов проводилось с использованием кода com.test.script.ScriptTest. Результаты показали, что OGNL имеет лучшую производительность.
Уже реализованы поддержка выражений SpringEL, OGNL и JavaScript.
Парсер | Получение значения из retVal (тип Map) | Получение значения из retVal (тип javaBean) | Использование функции hash | Использование функции empty |
---|---|---|---|---|
Spring | #retVal.get('rid') |
#retVal.rid |
#hash(#args) |
#empty(#args[0]) |
JavaScript | retVal.get('rid') |
retVal.rid |
hash(args) |
empty(args[0]) |
OGNL | #retVal.rid |
#retVal.rid |
@@hash(#args) |
@@empty(#args[0]) |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )