变换方法输入与方面

时间:2012-05-04 16:36:57

标签: java aop transform

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

这是否可能,或者由于安全问题而无法完成?

2 个答案:

答案 0 :(得分: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代理进行修改。

答案 1 :(得分: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();
}