首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ajc和IntelliJ进行AspectJ织造

用ajc和IntelliJ进行AspectJ织造
EN

Stack Overflow用户
提问于 2019-04-17 16:14:13
回答 1查看 762关注 0票数 0

我不知所措..。我遵循了AspectJ简介中的步骤,但是当我尝试用ajc编译示例时,我得到了一个警告:在我的建议之前、周围和之后,learning.AccountAspect中定义的建议还没有被应用到Xlint:adviceDidNotMatch上。这是我的完整代码:

Account.java

代码语言:javascript
复制
package learning;


public class Account {
    int balance = 20;

    public boolean withdraw(int amount) {
        if (balance < amount) {
            return false;
        }
        balance = balance - amount;
        return true;
    }
}

AccoutnAspect.aj

代码语言:javascript
复制
package learning;

public aspect AccountAspect {
    final int MIN_BALANCE = 10;

    pointcut callWithDraw(int amount, Account acc) :
            call(boolean Account.withdraw(int)) && args(amount) && target(acc);

    before(int amount, Account acc): callWithDraw(amount, acc) {
    }

    boolean around(int amount, Account acc) :
            callWithDraw(amount, acc) {
        if (acc.balance < amount) {
            System.out.println("Insufficient funds");
            return false;
        }
        System.out.println("Withdrawal approved");
        return proceed(amount, acc);
    }

    after(int amount, Account balance) : callWithDraw(amount, balance) {
    }
}

AccountTest.java

代码语言:javascript
复制
package learning;

import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class AccountTest {
    private Account account;

    @Before
    public void before() {
        account = new Account();
    }

    @Test
    public void given20AndMin10_whenWithdraw5_thenSuccess() {
        assertTrue(account.withdraw(5));
    }

    @Test
    public void given20AndMin10_whenWithdraw100_thenFail() {
        System.out.println(account.balance);
        assertFalse(account.withdraw(100));
        System.out.println(account.balance);
    }
}

我对AOP有大致的理解,并且在C#风格的AOP,PostSharp方面有很好的经验,但是我不能把我的头脑集中在AspectJ实现上。有人能解释一下我错过了什么明显的点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-24 03:02:50

谢谢你的MCVE。我克隆了它,发现了问题。正如我在之前的评论中所说..。

问题必须在您的构建或IDE设置中,而不是在AspectJ中。

..。更确切地说,您的Maven POM是错误的。您在AspectJ部分中配置了<pluginManagement> Maven,但实际上忘了将插件添加到<plugins>部分的Maven模块中,如下所示:

代码语言:javascript
复制
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
        </plugin>
    </plugins>

也许你应该先学一些Maven的基础知识。顺便说一句,您正在阅读的教程与您在POM中所做的不同,因此出现了问题。

此外,插件版本RELEASE不起作用,您确实需要设置一个真正的版本号,比如1.11。我还为您做了这些工作,另外,我还从Git存储库中删除了您的IDEA项目文件,并简化/改进了您的.gitignore文件。所有这些更改都可以在我的拉请求中找到和检查。

现在,使用mvn clean test构建的Maven以及从IntelliJ IDEA运行的测试都很好地工作。

享受吧!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55731983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档