我在aspectJ中使用加载时间编织(LTW)运行HelloWorld项目。我只定义了抽象方面。我没有定义具体方面,但在aop.xml中将"name"
的{{1}}属性称为<concrete-aspect>
,如下所示:
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>
我想知道具体的类实现是否是强制性的,因为它打印INFO消息来定义具体方面。此外,编织和应用方面和建议可以按照以下INFO消息正常工作。
[URLClassLoader@ddc3fe] info define aspect main.java.aop.helloworld.MyHelloWorldAspect
任何人都可以解释具体的类实现是否是强制性的。如果不需要,请帮助我理解它是如何工作的。感谢。
答案 0 :(得分:0)
如果您没有提供具体方面,则抽象方面的建议将不适用。编译:
class C {}
abstract aspect X { before():staticinitialization(C) {}}
并且X中的建议不适用于C.删除abstract
或提供X的具体子方面,它将适用。但是,这仅适用于建议 - 抽象方面中的任何静态横切将应用,例如,方法或字段类型声明。
对于具体方面,您有两个选项 - 代码或XML,并且您将使用XML路由,这很好。我认为您显示的第一条(措辞错误的)信息消息告诉您系统正在根据您的规范定义具体方面,而不是您需要的。