AspectJ切入点和建议,以捕获从一个Java类到另一个Java类的方法调用

问题描述 投票:0回答:1

我有两个类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的适当文档。任何指导将不胜感激。

java aspectj pointcut
1个回答
0
投票

使用以下切入点解决了它:

© www.soinside.com 2019 - 2024. All rights reserved.