Java SpringAOP:在方法之间交换信息
假设我有一个名为Java SpringAOP:在方法之间交换信息,java,spring,aop,spring-aop,cross-cutting-concerns,Java,Spring,Aop,Spring Aop,Cross Cutting Concerns,假设我有一个名为MyServlet的类,其目的是响应用户请求: @组件 公共类MyServlet { public void accept(字符串clientName,int clientID) { System.out.println(“处理客户端:+clientName+”,ID:+clientID); } } 一般来说,在尝试调试应用程序之前,为用户的请求提供服务可能是我们想要记录的内容。因此,如果我能在调用accept()之前透明地执行此行为,我真的很想这样做。对于此人来说,助手类可以
MyServlet
的类,其目的是响应用户请求:
@组件
公共类MyServlet
{
public void accept(字符串clientName,int clientID)
{
System.out.println(“处理客户端:+clientName+”,ID:+clientID);
}
}
一般来说,在尝试调试应用程序之前,为用户的请求提供服务可能是我们想要记录的内容。因此,如果我能在调用accept()
之前透明地执行此行为,我真的很想这样做。对于此人来说,助手
类可以提供日志功能,我们将在之前用@对其进行修饰:
@方面
@组成部分
@促性腺激素
公营助理员
{
@之前(“执行(公共无效显示())”)
公开作废日志()
{
System.out.println(“记录数据…”);
}
}
但是,如果能够获得提供给accept()
(在本例中,是字符串和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
}
}
(1) @enableAspectProxy
应位于单独的@配置
类上,而不是位于@组件
上。(2) 您的方面截取了show()
,但您的示例方法名为accept(String,int)
。所以我对你想要达到的目标感到困惑。代码本身并不能说明问题。因此,请更新问题,然后在此处发表评论通知我们。