gpt4 book ai didi

java - 使用 ajc 和 IntelliJ 进行 AspectJ 编织

转载 作者:行者123 更新时间:2023-12-02 01:33:05 37 4
gpt4 key购买 nike

我不知所措......我已经按照Intro to AspectJ的步骤进行操作,但是当我尝试使用 ajc 编译示例时,我在之前、前后和之后的建议中收到“ajc:在学习中定义的建议。AccountAspect 尚未应用 [Xlint:adviceDidNotMatch]” 警告。这是我的完整代码:

帐户.java

package learning;


public class Account {
int balance = 20;

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

AccountAspect.aj

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

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 的实现。有人可以阐明我错过了什么明显的观点吗?

最佳答案

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

The problem must be in your build or IDE setup, not in AspectJ.

...您遇到了构建管理问题,更准确地说,您的 Maven POM 是错误的。您在 <pluginManagement> 中配置了 AspectJ Maven部分,但忘记实际将插件添加到 <plugins> 中的 Maven 模块中像这样的部分:

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

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

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

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

享受吧!

关于java - 使用 ajc 和 IntelliJ 进行 AspectJ 编织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55731983/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com