Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AspectJ关于建议_Java_Aspectj - Fatal编程技术网

Java AspectJ关于建议

Java AspectJ关于建议,java,aspectj,Java,Aspectj,我正在写我的硕士论文,题目是“面向方面的软件开发”。我必须用AspectJ做一个简单的项目,所以我用AspectJ设置了Eclipse 我很难理解周围的建议。我创建了3个文件: 1) 给你留言。爪哇 2) 信息测试。爪哇 3) 简单的方面。aj 在simple_aspect文件中: 1) 之前和之后的建议都像(我认为)预期的那样起作用——所以,我“评论”了它们 2) around建议仅适用于MESSAGE_ONE()方法 我的问题是: 1) 有人能给我解释一下(从simple_aspect文件)

我正在写我的硕士论文,题目是“面向方面的软件开发”。我必须用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:

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上的脚本告诉我的)