Java AspectJ关于建议
我正在写我的硕士论文,题目是“面向方面的软件开发”。我必须用AspectJ做一个简单的项目,所以我用AspectJ设置了Eclipse 我很难理解周围的建议。我创建了3个文件: 1) 给你留言。爪哇 2) 信息测试。爪哇 3) 简单的方面。aj 在simple_aspect文件中: 1) 之前和之后的建议都像(我认为)预期的那样起作用——所以,我“评论”了它们 2) around建议仅适用于MESSAGE_ONE()方法 我的问题是: 1) 有人能给我解释一下(从simple_aspect文件)在around建议中命名参数背后的逻辑吗 2) 如何使方面接受并更改MESSAGE_TWO()方法中的两个片段(消息) 谢谢:) message_out.java:Java AspectJ关于建议,java,aspectj,Java,Aspectj,我正在写我的硕士论文,题目是“面向方面的软件开发”。我必须用AspectJ做一个简单的项目,所以我用AspectJ设置了Eclipse 我很难理解周围的建议。我创建了3个文件: 1) 给你留言。爪哇 2) 信息测试。爪哇 3) 简单的方面。aj 在simple_aspect文件中: 1) 之前和之后的建议都像(我认为)预期的那样起作用——所以,我“评论”了它们 2) around建议仅适用于MESSAGE_ONE()方法 我的问题是: 1) 有人能给我解释一下(从simple_aspect文件)
package mypackage;
public class message_out {
public static void message_one(String message) {
System.out.println(message);
}
public static void message_two(String message1, String message2) {
System.out.println(message1 + ", " + message2);
}
}
消息_test.java:
package mypackage;
public class message_test {
public static void main(String[] args) {
message_out.message_one("AAAAA");
message_out.message_two("BBBBB", "CCCCCC");
}
}
simple_aspect.aj:
package mypackage;
public aspect simple_aspect {
/*pointcut message_before() : call (* message_out.message_one(..));
before() : message_before() {
System.out.println("BEFORE");
}
pointcut message_after() : call (* message_out.message_one(..));
after() : message_after() {
System.out.println("AFTER");
}*/
pointcut message_around(String WHYTHIS)
: call(* message_out.message_one(String)) && args (WHYTHIS);
void around (String WHYTHAT) : message_around(WHYTHAT) {
WHYTHAT = "CHANGED";
proceed (WHYTHAT);
}
}
因此,我从Gradecki J.和Lasiecki N.那里找到了一本书:“掌握AspectJ”。我花了几个小时来理解这些建议背后的逻辑。我仍然不完全明白,但我知道它应该如何工作
pointcut firstPointcut (String s, String t) : call (public void helloWorld(String, String)) && args (s, t);
void around (String s, String t) : firstPointcut (s, t) {
System.out.println("1st passed value: " + s);
System.out.println("2nd passed value: " + t);
s = "changed first one";
t = "changed second one";
proceed (s, t);
}
下面的摘录帮助我理解了“一个论点”,从而将逻辑应用于“两个论点”
摘自该书:
1) ARGS指示符提供了相关的通知代码,可以访问最初传递给helloWorldUnique()方法的参数
2) 方法签名中的单参数类型-只应考虑使用单参数的调用
3) ARGS指示符只有一个参数。此参数与传递给作为连接点一部分定义的方法的单个参数直接相关
4) 切入点完全基于连接点和args指示符的组合定义单个参数
5) 因此,如果切入点需要一个名为s的字符串,那么应该有一个用字符串参数定义的连接点和一个用变量s定义的args指示符
6) 触发切入点uniqueLog时,其由s变量定义的字符串参数将提供给before()通知正文。解释您或其他人选择某些变量名的逻辑?!在任何情况下,如果这是你的论文,我可能会阅读AspectJ教程,我会从学习所选工具开始。描述建议在我之前看过的ask教程和书籍中都有介绍,因为它非常重要。我仍在学习AspectJ并试图理解Java(我对Java是新手)。这就是为什么同时理解和“连接”这两个工具有点困难的原因。我住的地方不可能买到这样的书,而且我也不太喜欢数码(非合法)拷贝。另外,关于AspectJ的书(最后我不得不从网络上学习)有一些高级术语,让乞丐(又名新手)完全理解它,而且,我不认为每个人(包括我)都有时间阅读所有材料,完全理解一切,只是写一个简单的例子。亲爱的霸主,由于您似乎是StackOverflow的新手,我建议您接受自己的答案,如果它解决了您的问题,以便结束问题。另一个选择是完全删除这个问题。谢谢你的建议。我知道我会接受这个答案。问题是,我必须等待24小时才能接受我自己的答案(stackoverflow上的脚本告诉我的)