Java 对象方面中的AspectJ切入点不工作

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

我就是不明白为什么我的切入点不起作用。编译器并没有给出任何警告,所以我无法解释它为什么不工作。我正在maven javafx应用程序中使用aspectjrt 1.7.2和aspectjtools 1.7.0

我的样子是这样的

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构造函数的调用吗? 此电影构造函数方法是默认构造函数还是用户定义的构造函数