在方法中添加额外的参数?

时间:2014-01-08 11:39:40

标签: java spring aspectj spring-aop java-ee-7

我有以下方面。

@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?

谢谢!

2 个答案:

答案 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应该是研究这个主题的重要资源。