我有一个将字符串作为输入的方法,我想让一个方面拦截方法执行,并在某些特定条件下修改字符串并让连接点接收新输入,所以它不知道它已经被改变了。
这是可能的,还是出于安全考虑不能这样做?
使用 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 代理进行处理。
这应该是可能的,但取决于您使用的 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();
}