【问题标题】:Newbie working with AspectJ: Can't get aspect called使用 AspectJ 的新手:无法调用方面
【发布时间】:2011-05-12 02:50:19
【问题描述】:

因此,我开始研究使用 AspectJ 在我的域中对象的状态发生变化时处理事件。

实际上,我想编写包含我域中所有 setter 方法的建议。调用通知时,它会检查正在设置的字段的初始值,运行 setter,然后在 setter 执行后检查值。如果值发生变化,它会向事件监听器触发一个事件,通知变化。

我使用了此处的教程:http://www.andrewewhite.net/wordpress/2010/03/17/aspectj-annotation-tutorial/,但我无法获得任何建议电话。请注意,我只是使用 LTW 方法来编织我的建议,而不是使用 AspectJ 语言编写建议并进行预编译。

我的 aop.xml(在我的测试套件的 META-INF 中)如下所示:

方面>

我创建的 Aspect 类如下所示:

包域.aop;

导入 org.aspectj.lang.JoinPoint;
导入 org.aspectj.lang.annotation.Aspect;
导入 org.aspectj.lang.annotation.Before;

@方面
公共类TestAspect
{
    @Around("调用(* domain.*.set*(..))")
    public void aroundSetMethods (JoinPoint jp)
    {
        System.out.println("aroundSetMethod 被调用");
    }
}

当我运行我的测试用例时,我可以看到(通过设置断点)方法 (domain.Error.setTask ()) 被调用。我相信这应该会触发我的建议,但我从未进入过建议方法。

任何指向我在这里做错了什么的指针?

谢谢

【问题讨论】:

    标签: java aspectj


    【解决方案1】:

    您还必须包括要编织的类。

    尝试将您的 aop.xml 文件替换为:

    <!DOCTYPE aspectj PUBLIC
            "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
    <aspectj>
        <weaver>
            <!-- only weave classes in this package -->
            <include within="domain.*" />
        </weaver>
        <aspects>
            <!-- use only this aspect for weaving -->
            <aspect name="domain.aop.TestAspect"/>
        </aspects>
    </aspectj>
    

    如果您正确配置了运行时服务器或 Java 代理,您还可以在日志中看到编织过程。

    希望对你有帮助!

    【讨论】:

    • 就是这样。我的印象是 @Around 注释足以让编织者确定要检测哪些类。显然还有一点点配置要做。谢谢...
    猜你喜欢
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多