0

假设我有一个名为 的类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()(在本例中为 aString和 an int)的信息并将其传递给 对我来说真的很有用log(),因为它允许我将用户及其 ID 准确地记录到任何日志存储中我用。我怎样才能做到这一点?

4

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
   }
}
于 2020-09-27T18:15:49.550 回答