По моему опыту, самые большие издержки находятся в фактической выдаче исключения и обработке его. Я когда-то работал над проектом, где код, подобный следующему, использовался, чтобы проверить, имел ли кто-то право отредактировать некоторый объект. Этот 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();
}
Так короче говоря, использование исключений в нормальном технологическом маршруте является приблизительно двумя порядками величины медленнее тогда использующий подобный технологический маршрут без исключений.
Вы можете использовать один из вариантов метода 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");
}