在aspectJ中是否必须实现具体方面
Is it mandatory to implement concrete aspect in aspectJ
我正在 运行使用 aspectJ 中的加载时间织入 (LTW) 构建一个 HelloWorld 项目。我只定义了抽象方面。我没有定义具体方面,但在 aop.xml 中提到 <concrete-aspect>
的 "name"
属性为 main.java.aop.helloworld.MyHelloWorldAspect
,如下所示:
<concrete-aspect name="main.java.aop.helloworld.MyHelloWorldAspect"
extends="main.java.aop.helloworld.HelloWorldAspect">
<pointcut name="helloWorld"
expression="execution(public static void HelloWorld.say*(..))" />
</concrete-aspect>
我可以 运行 应用程序正常运行并获得所需的结果。但是,打印下面的行来定义具体方面。
[URLClassLoader@ddc3fe] info define aspect main.java.aop.helloworld.MyHelloWorldAspect
我想知道具体 class 实现是否是强制性的,因为它打印一条 INFO 消息来定义具体方面。此外,根据以下信息消息,编织和应用方面和建议工作正常。
[URLClassLoader@ddc3fe] weaveinfo Join point 'method-execution(void main.java.aop.helloworld.HelloWorld.say(java.lang.String))' in Type 'main.java.aop.helloworld.HelloWorld' (HelloWorld.java:5) advised by before advice from 'main.java.aop.helloworld.MyHelloWorldAspect' (HelloWorldAspect.java)
谁能解释具体的 class 实施是否是强制性的。如果不需要,那么请帮助我理解它是如何工作的。谢谢。
如果您不提供具体方面,那么抽象方面的建议将不适用。编译这个:
class C {}
abstract aspect X { before():staticinitialization(C) {}}
并且 X 中的建议不适用于 C。删除 abstract
或提供 X 的具体子方面,它将适用。但是,这仅适用于建议 - 抽象方面的任何静态横切 都将 适用,例如方法或字段间类型声明。
对于具体方面,您有两个选择 - 代码或 XML,并且您将走 XML 路线,这很好。我认为您显示的第一条(措辞不当的)信息消息告诉您系统正在根据您的规范定义具体方面,而不是您需要。
我正在 运行使用 aspectJ 中的加载时间织入 (LTW) 构建一个 HelloWorld 项目。我只定义了抽象方面。我没有定义具体方面,但在 aop.xml 中提到 <concrete-aspect>
的 "name"
属性为 main.java.aop.helloworld.MyHelloWorldAspect
,如下所示:
<concrete-aspect name="main.java.aop.helloworld.MyHelloWorldAspect"
extends="main.java.aop.helloworld.HelloWorldAspect">
<pointcut name="helloWorld"
expression="execution(public static void HelloWorld.say*(..))" />
</concrete-aspect>
我可以 运行 应用程序正常运行并获得所需的结果。但是,打印下面的行来定义具体方面。
[URLClassLoader@ddc3fe] info define aspect main.java.aop.helloworld.MyHelloWorldAspect
我想知道具体 class 实现是否是强制性的,因为它打印一条 INFO 消息来定义具体方面。此外,根据以下信息消息,编织和应用方面和建议工作正常。
[URLClassLoader@ddc3fe] weaveinfo Join point 'method-execution(void main.java.aop.helloworld.HelloWorld.say(java.lang.String))' in Type 'main.java.aop.helloworld.HelloWorld' (HelloWorld.java:5) advised by before advice from 'main.java.aop.helloworld.MyHelloWorldAspect' (HelloWorldAspect.java)
谁能解释具体的 class 实施是否是强制性的。如果不需要,那么请帮助我理解它是如何工作的。谢谢。
如果您不提供具体方面,那么抽象方面的建议将不适用。编译这个:
class C {}
abstract aspect X { before():staticinitialization(C) {}}
并且 X 中的建议不适用于 C。删除 abstract
或提供 X 的具体子方面,它将适用。但是,这仅适用于建议 - 抽象方面的任何静态横切 都将 适用,例如方法或字段间类型声明。
对于具体方面,您有两个选择 - 代码或 XML,并且您将走 XML 路线,这很好。我认为您显示的第一条(措辞不当的)信息消息告诉您系统正在根据您的规范定义具体方面,而不是您需要。