假设我有一个名为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()
(在本例中为String
和int
(的信息并将其传递到log()
将非常有用,因为这将允许我将用户及其ID准确地记录到我使用的任何日志存储中。我怎样才能做到这一点?
您可以通过注入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
}
}