我的 (AspectJ) jar 无法识别联合剪切

发布于 2025-01-07 06:27:24 字数 939 浏览 1 评论 0原文

环境:简单的Java独立应用程序。 AspectJ 罐子里面。

我有两个项目。第一个“A”包含自定义方法范围注释和一个方面,该方面负责在调用该方法时执行某些任务。

注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AccessibleForRole {

    String value() ;

}

方面:

public aspect AccessibleListener {

pointcut verifyRole(): 
    (
            call(@AccessibleForRole * *())          
    );

    before() : verifyRole() { // do something
    }
}

我已经用这些注释/方面完成了一个 jar 文件。

之后,我在项目 A 中创建一个模型类。我用注释注释了一个方法,运行程序,我看到方面捕获了事件并正在处理。

public class Model {

    @AccessibleForRole("admin")
    public void addUserToApplication(){
        System.out.println("in Model.addUserToApplication.");
    }
}

它工作得很好......但是...... 如果我创建第二个项目,使用 jar 'A' 项目 'B',并使用我注释的方法创建新类(例如,与模型相同),似乎没有什么特别的情况发生。什么也没被抓住。

将来是否有可能创建一些必须用 AspectJ 从项目 A jar 捕获的东西,而不必重新编译?

提前致谢,

Environnement : Simple Java stand-alone application. AspectJ jar inside.

I've two projects. The first one, say 'A' contains a custom method scope annotation and an aspect who is in charge of doing some task when the method is called.

The annotation :

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AccessibleForRole {

    String value() ;

}

The aspect :

public aspect AccessibleListener {

pointcut verifyRole(): 
    (
            call(@AccessibleForRole * *())          
    );

    before() : verifyRole() { // do something
    }
}

I've done a jar file with thoses annotations/aspects.

After that, I create a model class in project A. I annotate a method with my annotation, run the program and I see the aspect catching the event and working on.

public class Model {

    @AccessibleForRole("admin")
    public void addUserToApplication(){
        System.out.println("in Model.addUserToApplication.");
    }
}

It works fine....but....
If I create a second project, project 'B' using jar 'A', and I create new classes, with methods that I annotate (same a Model for example), it seems that nothing special occurs. Nothing is catched.

Is it possible to create, in the future, something that have to be catched with AspectJ from project A jar, without having to recompile ?

Thanks in advance,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

戴着白色围巾的女孩 2025-01-14 06:27:24

问题解决了。
感谢 Maven 插件: http://mojo.codehaus.org/aspectj-maven -plugin/libraryJars.html

<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>

我放入:

<aspectLibraries>
    <aspectLibrary>
       <groupId>myGroupId</groupId>
       <artifactId>jarA</artifactId>
    </aspectLibrary>
</aspectLibraries>

并且在构建或运行时,来自项目 B 的代码被 jarA 中定义的方面正确拦截。

我希望这会有所帮助。

Problem resolved.
Thanks to a Maven plugin : http://mojo.codehaus.org/aspectj-maven-plugin/libraryJars.html

<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>

I put :

<aspectLibraries>
    <aspectLibrary>
       <groupId>myGroupId</groupId>
       <artifactId>jarA</artifactId>
    </aspectLibrary>
</aspectLibraries>

And when building or running, code from project B is correctly intercepted by the aspect define in jarA.

I hope this will help.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文