是否必须在aspectJ中实现具体方面

时间:2015-02-04 07:42:49

标签: java aop aspectj

我在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

任何人都可以解释具体的类实现是否是强制性的。如果不需要,请帮助我理解它是如何工作的。感谢。

1 个答案:

答案 0 :(得分:0)

如果您没有提供具体方面,则抽象方面的建议将不适用。编译:

class C {}
abstract aspect X { before():staticinitialization(C) {}}

并且X中的建议不适用于C.删除abstract或提供X的具体子方面,它将适用。但是,这仅适用于建议 - 抽象方面中的任何静态横切将应用,例如,方法或字段类型声明。

对于具体方面,您有两个选项 - 代码或XML,并且您将使用XML路由,这很好。我认为您显示的第一条(措辞错误的)信息消息告诉您系统正在根据您的规范定义具体方面,而不是您需要的。