pointcut vistaInjection(Object o)
: initialization(java.lang.Object.new() )
&& target(o)
&& !within(objectAspect);
before(Object o): methodInjection(o){System.err.println("INIT");}
对象的切入点初始化,所以我可以直接将这些方法注入到作为每一个其他对象的一部分的对象中。
然而,它不起作用。你知道为什么吗?或者有什么其他方法可以100%地确保每个初始化的对象都是切入点?*.new不适用于字符串、列表等内容。
谢谢!
用户selig是对的:您可能不希望截获所有对象创建,尤其是JDK/JRE类中的对象创建。但对于它的价值,这里有一个解释,什么是有效的,如何,什么是无效的:
一个小小的驱动程序:
public class Application {
public static void main(String[] args) {
new Application();
new String();
}
}
具有不同类型的构造函数相关切入点/建议的方面:
public aspect ObjectCreationAspect {
before() : preinitialization(*.new(..)) && !within(ObjectCreationAspect) {
System.out.println(thisJoinPointStaticPart);
}
before() : initialization(*.new(..)) && !within(ObjectCreationAspect) {
System.out.println(thisJoinPointStaticPart);
}
before() : call(*.new(..)) && !within(ObjectCreationAspect) {
System.out.println(thisJoinPointStaticPart);
}
before() : execution(*.new(..)) && !within(ObjectCreationAspect) {
System.out.println(thisJoinPointStaticPart);
}
}
编织驱动程序应用程序的输出:
call(Application())
preinitialization(Application())
initialization(Application())
execution(Application())
call(java.lang.String())
说明:
AspectJ中有不同类型的编织:
问题内容: 我需要使用AspectJ向每个初始化的对象注入一些方法。 我以为是这样的: 指向对象的切入点初始化,因此我可以将这些方法直接注入到每个其他对象的对象中。 但是,它不起作用。你知道为什么吗?还是另一种方法可以如何100%确保每个初始化的对象都将成为切入点?* .new不适用于String,List等。 谢谢! 问题答案: 用户selig是正确的:您可能不想截取 所有 对象,尤其是JDK
这就是我的目标: 这是我的Aspect类: 如何为构造函数对象创建切入点?
类 类是对某一事物的抽象描述,具体地讲,类是C++中的一种构造的数据类型。它即可包含描述事物的数据,又可包含处理这些数据的函数,类在程序运行时是被用作样板来建立对象的。所以要建立对象,首先必须定义类。 定义类 定义一个类的一般格式为: class 类名{ private: 成员表1; public: 成员表2; protected:
我就是不明白为什么我的切入点不起作用。编译器并没有给出任何警告,所以我无法解释它为什么不工作。我正在maven javafx应用程序中使用aspectjrt 1.7.2和aspectjtools 1.7.0。 我的样子是这样的 我的电影方面位于包主要。模型 下面是对我的代码中实际发生的事情的一点解释 当我的gui加载时,我初始化MainFrame类。在此之前,另一个方面加载所有电影对象。然后,当主
是否有一种方法可以使用spring来指向cut hibernate实体。 这是我发现的,但没有解决办法
在尝试向CDI bean(ApplicationScoped)的构造函数中注入参数时,我遇到了以下问题: 但是,我在类上确实有一个可注入的构造函数: 有什么想法这里出了什么问题吗?