我有两个类Server和Client,如下所示:
import java.util.*;
public class Server {
private String name;
private ArrayList<Client> clients = new ArrayList<Client>();
public Server(String name) {
this.name = name;
this.active = true;
}
public void attach (Client client) {
clients.add(client);
}
public String ping() {
return "PING ";
}
}
public class Client {
private String name;
private String address;
private Server server;
public Client(String name, String address) {
this.name = name;
this.address = address;
}
public void connect(Server server) {
this.server = server;
server.attach(this);
}
public String pingServer() {
return server.ping();
}
}
我想编写一个切入点以捕获从客户端发送到服务器的所有消息,并建议在允许发送消息之前执行建议。我写的代码如下:
切入点
pointcut chckDomain (Server s, Client c) : call (* Client.*(..))
&& target(s)
&& this(c);
Advice
Object around(Server s, Client c) : chckDomain(s, c) {
System.out.println("checkDomain");
proceed(s, c);
return null;
}
我能够使用之前建议获得期望的结果。但是我想在对建议进行一些检查之后恢复正常执行,这就是为什么我使用如上所示的around建议。但是,这没有捕获消息调用。请注意,客户端和服务器类没有其他方法,它们具有不同的返回类型和不同的参数,这就是为什么我无法对其进行硬编码的原因。我在测试的主要方法中使用了以下代码。
Server university = new Server("MyUniversity");
Client mark = new Client("Mark", "student.edu");
mark.connect(university);
System.out.println(mark.pingServer());
除Eclipse文档外,我找不到AscpectJ的适当文档。任何指导将不胜感激。
使用以下切入点解决了它: