有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring AOP:在方法之间交换信息

假设我有一个名为MyServlet的类,其目的是响应用户请求:

@Component
public class MyServlet
{
    public void accept(String clientName, int clientID)
    {
        System.out.println("Processing client:" + clientName + " with ID: " + clientID);
    }
}

一般来说,在我们尝试调试应用程序之前,为用户的请求提供服务可能是我们想要记录的事情。所以我真的希望在调用accept()之前,这种行为能够透明地发生。对于此人来说,Helper类可以提供日志功能,我们将用@Before来修饰它:

@Aspect
@Component
@EnableAspectJAutoProxy
public class Helper
{
    @Before("execution(public void show())")
    public void log()
    {
        System.out.println("Logging data...");
    }
}

但是,对于我来说,能够获得提供给accept()(在本例中,是a String和a int)的信息并将其传递到log()中是非常有用的,因为这将允许我准确地将用户及其ID记录到我使用的任何日志存储中。我怎样才能做到这一点


共 (1) 个答案

  1. # 1 楼答案

    您可以通过注入JoinPoint实例并在其上调用getArgs()方法来访问代理方法的参数。下面是一个示例片段

    @Before("execution(* com.sample.SomeClass.doSometning(..))")
    public void doSomethingBefore(JoinPoint joinPoint) {
       Object[] args = joinPoint.getArgs();
       for (Object arg: args) {
           // do whatever you like with the arguments
       }
    }