我有一个方法,它接受一个String作为输入,我希望有一个方面拦截方法执行,并在某些条件下,修改字符串并让连接点接收新的输入,所以它不知道它已经被改造了。
这是否可能,或者由于安全问题而无法完成?
答案 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();
}