1

我有一个将字符串作为输入的方法,我想让一个方面拦截方法执行,并在某些特定条件下修改字符串并让连接点接收新输入,所以它不知道它已经被改变了。

这是可能的,还是出于安全考虑不能这样做?

4

2 回答 2

2

使用 AspectJ,您可以像这样声明环绕建议:

 public aspect TransformationAspect {
   pointcut transform(String s) : call(* yourMethodName(..)) && args(s);

   Object around(String s): transform(s) {
     // ... Transform String here
     return proceed(s);
   }
 }

您的代码必须在编译时或在运行时使用 AspectJ Java 代理进行处理。

于 2012-05-04T16:44:21.600 回答
0

这应该是可能的,但取决于您使用的 AOP 技术。

对于 EJB 3.x 或 CDI,它可能类似于以下伪代码:

Object intercept( InvocationContext context ) {

  Object[] params = context .getParameters();

  //modify the string and update the array
  //the value of i depends on the method signature (the parameter position)
  //and getting it is left for you as an excersise
  params[i] =  modify( (String)params[i] );  

  context.setParameters( params );
  return context.proceed();
}
于 2012-05-04T16:48:27.087 回答