我有以下方面。
@Around("somePublicMethod()")
public Object doAction(ProceedingJoinPoint call) throws Throwable {
SomeObject client = null;
Object result = null;
try
{
client = someDao.getResult();
Object[] allArgs = call.getArgs();
allArgs[allArgs.length-1] = client;
// Do the call, passing in the managed SiperianClientWrapper
result = call.proceed(allArgs);
}
catch(Exception ex)
{
throw ex;
}
我有一种服务方法如下。此方法被上述方面拦截
public SomeEntity getEntities(String name, String pwd, SomeObject client){
//some logic
}
上面的方法如下所示。
someService.getEntities("name","pwd",null);
什么方面的做法是,SomeObject有null,null被一些实际值替换。
我的问题是,不是将null作为参数值传递,而是可以在Aspect中使用Reflection with添加额外的参数吗?在我的情况下,SomeObject参数可以动态添加吗?
所以最后我必须将服务称为someService.getEntities("name","pwd");
,并且Aspect会动态添加SomeObject?
谢谢!
答案 0 :(得分:0)
如果您的java文件使用方法声明声明为
public SomeEntity getEntities(String name, String pwd, SomeObject client){
那就是你必须要使用的东西。方法调用如
someService.getEntities("name","pwd");
不会编译。
反射不能改变编译的字节码。
尝试通过仅使用前两个参数的反射来调用此方法将导致IllegalArgumentException
。
答案 1 :(得分:0)
如果您愿意使用ajc编译器,则可以使用extend class和重载方法,因为javac编译器无法编译。 在线资源有点稀缺,但AspecJ in Action应该是研究这个主题的重要资源。