知识问题=无代码,无错误,无报告示例。
我在method()
的{{1}}上应用了一个联接点,ClassA
不是一个单身人士。我创建了ClassA
来处理这个连接点。
问题:如果有MyAspect
的2个呼叫者,并且呼叫者在2个不同的线程(例如Web请求)上工作,则AspectJ将在2个不同的线程或单个线程上运行ClassA.method()
?< / p>
我认为AspectJ在编织类的同一个线程中执行MyAspect
(在这种情况下为MyAspect
)。
答案 0 :(得分:2)
AspectJ将在当前线程上执行您的方面。这意味着,如果您有多线程执行,您的方面也将在多个线程上运行。如果您的方面适用于共享状态,则需要确保以安全的方式访问共享状态。
另请注意,除了默认的 singleton 之外,还有其他方面的实例化模型。使用单例方面,您的应用程序中只会创建一个方面实例。您可以使用perthis()
,pertarget()
,percflow()
或percflowbelow()
修饰符更改您的方面将如何实例化,AspectJ将在<上创建方面的新实例em> per-object 或 per-control-flow 基础。您可能能够使用这些实例化模型隔离方面状态,但如果您使用共享状态,则基本规则仍然适用:您需要注意对共享状态的线程安全访问。