Это, вероятно, не то, что Вы хотели, чтобы я сказал, но это - хорошее использование AOP. Хлещите перехватчик прокси вокруг своего метода и сделайте синхронизацию там.
, какой, почему и как из AOP скорее выходит за рамки этого ответа, к сожалению, но это - то, как я, вероятно, сделал бы это.
Редактирование: Вот ссылка к AOP Spring для запущения Вас, если Вы увлечены. Это - самая доступная реализация AOP, с которым Iive сталкиваются для Java.
кроме того, учитывая всех очень простые предложения else, я должен добавить, что AOP для того, когда Вы не хотите, чтобы материал как синхронизация вторгся в Ваш код. Но во многих случаях, такой простой и легкий подход прекрасен.
Нет, это невозможно. Обновление: теперь это возможно через API истории HTML5 - см. разбаков s ответ .
Надеюсь, вы понимаете, что пытаетесь решить чрезвычайно сложную проблему.
Допустим, ваш URL-адрес выглядит как
http://example.com/mypage/
. Если вы программно измените расположение окна на
http://example/mypage/1/
Браузер примет и попробуйте перейти на эту страницу, вот и ваш причудливый код ajax!
Итак, какая альтернатива? Вы используете фрагмент URL.
Допустим, у вас есть такой URL,
http://example.com/anotherpage/#section
Браузер сначала загрузит http://example.com/anotherpage/ и попытается найти привязку с именем 'section' и прокрутит до этого места . Такое поведение используется плагином «Адреса». Это похоже на то, как работают ссылки «Scroll To Top».
Итак, если вы находитесь на странице
http://example.com/mypage/
и измените URL-адрес на
http://example.com/mypage/#1
, браузер не будет загружать новую страницу, а попытается найти привязку с именем '1 ' и прокрутите до этого якоря.
Даже если вам удалось добавить фрагменты в URL, это не значит, что работа сделана. Если пользователь нажмет кнопку «Назад», DOM будет сброшен, и вам придется проанализировать эти фрагменты и воссоздать DOM. Это определенно нетривиально.