Java 对象方面中的AspectJ切入点不工作
我就是不明白为什么我的切入点不起作用。编译器并没有给出任何警告,所以我无法解释它为什么不工作。我正在maven javafx应用程序中使用aspectjrt 1.7.2和aspectjtools 1.7.0 我的样子是这样的Java 对象方面中的AspectJ切入点不工作,java,aspectj,Java,Aspectj,我就是不明白为什么我的切入点不起作用。编译器并没有给出任何警告,所以我无法解释它为什么不工作。我正在maven javafx应用程序中使用aspectjrt 1.7.2和aspectjtools 1.7.0 我的样子是这样的 public privileged aspect MovieAspect perthis(MovieInit()) { pointcut MovieInit(): execution(Movie.new(..)); pointcut reloadMainPanelVie
public privileged aspect MovieAspect perthis(MovieInit()) {
pointcut MovieInit(): execution(Movie.new(..));
pointcut reloadMainPanelView(): cflow(execution(void main.views.MainFrame.MainPanel.fillMainPanel(..)));
before(ArrayList tar): target(tar) && reloadMainPanelView() && call(void java.util.ArrayList.clear())
&& !within(MovieAspect) {
System.out.println("test");
}
my MovieAspect位于包main.models中
下面是对我的代码中实际发生的事情的一点解释
当我的gui加载时,我初始化MainFrame类。在此之前,另一个方面加载所有电影对象。然后,当主机在主面板中初始化电影对象的视图时,它首先清除其视图对象并重新加载它们。因为我将所有这些视图作为侦听器添加到了相应的电影对象中,所以我需要再次删除它们。当然,我可以在调用ArrayList的clear方法之前做些什么,但我真的很想知道切入点为什么不起作用。 MovieAspect对象会被实例化,我用MovieInit()切入点测试了这一点
有人知道为什么这个切入点不起作用吗?实际上,在同一个包中的外部类上的所有切入点都不起作用,除了类中的切入点 希望有人能帮忙 编辑: 这对于电影类的所有构造函数来说都是一个陷阱,但这并不重要。经过几个小时的研究,我找到了解决办法。本文解释了这种行为 4.3.4连接点的隐式限制 使用每对象或每控制流关联具有隐式的副作用 将方面中的建议限制为仅与 方面实例。方面实例的范围是 具有与之关联的方面实例。例如,对于percflow() 关联,方面实例的范围是发生在其中的所有连接点 指定切入点的控制流。这意味着,即使为通知指定的切入点与连接点匹配,该连接点的通知也不会匹配 应用,除非连接点也与方面的范围匹配。这个副作用 当开发人员重构一个方面以创建可重用的部件时,他们常常会感到惊讶 并且需要使用每个关联。 aspect关联意味着aspect中的建议将应用于join 仅当满足以下条件时才可获得积分: ■ 对于perthis()关联,连接点的执行对象与 方面实例的关联对象 ■ 对于pertarget()关联,连接点的目标对象与 方面的关联对象 ■ 对于percflow()关联,连接点位于 方面的关联控制流 ■ 对于percflowbelow()关联,连接点位于控制流下方 特性的关联控制流。您确定MovieInit()切入点捕捉到对movie构造函数的调用吗? 此电影构造函数方法是默认构造函数还是用户定义的构造函数