имеет выполнение AspectJ в потокобезопасном режиме?

Вопрос о знаниях = нет кода, нет ошибок, нет примеров к отчетам.

Я применил точку соединения к method() из ClassA, а ClassA не является синглтоном. Я создаю MyAspect, которые обрабатывают эту точку соединения.

Вопрос: если есть 2 вызывающих ClassA.method(), и вызывающие абоненты работают в 2 разных потоках (например, веб-запросы), AspectJ будет запускать MyAspect в двух разных потоках или в одном?

Я думаю, что AspectJ выполняет MyAspect в том же потоке тканого класса (в данном случае ClassA).


person Giorgio Desideri    schedule 07.07.2016    source источник


Ответы (1)


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

Также обратите внимание, что помимо singleton по умолчанию существуют и другие модели создания аспектов. С одноэлементным аспектом в вашем приложении будет создан только один экземпляр аспекта. Вы можете использовать модификаторы perthis(), pertarget(), percflow() или percflowbelow(), которые изменяют способ создания экземпляра вашего аспекта, и AspectJ создаст новый экземпляр вашего аспекта для для каждого объекта или для каждого элемента управления. -поток основе. Вы можете изолировать состояние аспекта с помощью этих моделей создания экземпляров, но если вы используете общее состояние, основное правило по-прежнему применяется: вам нужно позаботиться о потокобезопасном доступе к общему состоянию.

person Nándor Előd Fekete    schedule 07.07.2016
comment
Спасибо за ответ и предложения. - person Giorgio Desideri; 08.07.2016