1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/qiujiayu-AutoLoadCache

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
script.md 5.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 00:26 77bc1ee

Применение выражений

Далее в качестве примера рассматривается использование выражений 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».

Предоставляемые данные контекста SpEL

Имя Описание Пример
args Список параметров текущего вызываемого метода #args[0]
retVal Возвращаемое значение после выполнения метода (действует только после выполнения метода, например, @Cache(opType=CacheOpType.WRITE), expireExpression, autoLoadCondition, @ExCache() #retVal
target Текущий экземпляр, перехваченный AOP #target

Функции, предоставляемые SpEL

Имя Описание Пример
hash Преобразование объекта в уникальную строку хэша #hash(#args)
empty Проверка, является ли объект пустым #empty(#args[0])

Пользовательские функции SpEL

Пользовательские функции можно зарегистрировать через 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>

Вот несколько примеров механизмов вычисления выражений, найденных в интернете:

  1. Ognl http://commons.apache.org/proper/commons-ognl/
  2. fast-el https://code.google.com/archive/p/fast-el/
  3. JSEL https://code.google.com/archive/p/lite/wikis/JSEL.wiki
  4. Commons EL http://commons.apache.org/proper/commons-el/index.html
  5. commons-jexl http://commons.apache.org/proper/commons-jexl/
  6. Aviator https://code.google.com/archive/p/aviator/
  7. IKExpression https://code.google.com/archive/p/ik-expression/
  8. JDK встроенный механизм сценариев: javax.script.ScriptEngineManager
  9. JUEL
  10. beanshell http://www.beanshell.org/
  11. Groovy
  12. JRuby

Тестирование производительности скриптов проводилось с использованием кода 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/qiujiayu-AutoLoadCache.git
git@api.gitlife.ru:oschina-mirror/qiujiayu-AutoLoadCache.git
oschina-mirror
qiujiayu-AutoLoadCache
qiujiayu-AutoLoadCache
master