Spring пакета ресурса

По моему опыту, самые большие издержки находятся в фактической выдаче исключения и обработке его. Я когда-то работал над проектом, где код, подобный следующему, использовался, чтобы проверить, имел ли кто-то право отредактировать некоторый объект. Этот HasRight () метод использовали везде на уровне представления и часто называли в течение 100 с объектов.

bool HasRight(string rightName, DomainObject obj) {
  try {
    CheckRight(rightName, obj);
    return true;
  }
  catch (Exception ex) {
    return false;
  }
}

void CheckRight(string rightName, DomainObject obj) {
  if (!_user.Rights.Contains(rightName))
    throw new Exception();
}

, Когда тестовая база данных стала более полной данных тестирования, этого вывода к очень видимому замедлению, в то время как openening новые формы и т.д.

, Таким образом, я осуществил рефакторинг его к следующему, которое - согласно более поздним быстрым и грязным измерениям - является приблизительно 2 порядками величины быстрее:

bool HasRight(string rightName, DomainObject obj) {
  return _user.Rights.Contains(rightName);
}

void CheckRight(string rightName, DomainObject obj) {
  if (!HasRight(rightName, obj))
    throw new Exception();
}

Так короче говоря, использование исключений в нормальном технологическом маршруте является приблизительно двумя порядками величины медленнее тогда использующий подобный технологический маршрут без исключений.

6
задан Enrique 9 November 2009 в 03:38
поделиться

1 ответ

Вы можете использовать один из вариантов метода getMessage () в классе org.springframework.web.servlet.support.RequestContext. Примерно так работает:

protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
    RequestContext ctx = new RequestContext(request);
    String messageFromBundle = ctx.getMessage("a.message");
}
9
ответ дан 10 December 2019 в 02:49
поделиться
Другие вопросы по тегам:

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