Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用SpringAOP更改列表中的返回值?_Java_Spring_Hibernate_Aop - Fatal编程技术网

Java 如何使用SpringAOP更改列表中的返回值?

Java 如何使用SpringAOP更改列表中的返回值?,java,spring,hibernate,aop,Java,Spring,Hibernate,Aop,我正在使用search方法,该方法位于我的BaseRepository中,根据给定的搜索条件返回列表。我正在使用hibernate查询。该列表中的某些值将被加密。所以我想在列表返回之前使用SpringAOP修改它。下面代码中的returnList包含我使用AOP访问的搜索结果的list。如果字符串被加密,我将使用decrypt方法对该列表中的字符串进行解密。但是,我如何在下面的代码中进行更改,以反映在搜索的确切结果中。我的意思是,在方面所做的解密将如何反映在原始列表中 @Aspect @Serv

我正在使用
search
方法,该方法位于我的
BaseRepository
中,根据给定的搜索条件返回列表。我正在使用hibernate查询。该列表中的某些值将被加密。所以我想在列表返回之前使用SpringAOP修改它。下面代码中的
returnList
包含我使用AOP访问的搜索结果的
list
。如果字符串被加密,我将使用decrypt方法对该列表中的字符串进行解密。但是,我如何在下面的代码中进行更改,以反映在搜索的确切结果中。我的意思是,在方面所做的解密将如何反映在原始列表中

@Aspect
@Service
public class DecryptionAspect {

    @AfterReturning(value="(execution(* search(..)) )" +
            "&& target(com.erp.core.repo.IBaseRepository) " +
            "&& args(..)",returning="returnList")
    public void decrypt(List returnList) throws Exception
    {

        Iterator itr = returnList.iterator();
        while(itr.hasNext()){
            Object[] obj = (Object[]) itr.next();
            for(int i=0;i<obj.length;i++){
                if(obj[i]!=null)
                EncryptUtil.decrypt(obj[i].toString());


            }

        }
    }

} 
@方面
@服务
公共类解密spect{
@返回后(value=“(执行(*search(..))”+
“&&target(com.erp.core.repo.IBaseRepository)”+
“&&args(..”,returning=“returnList”)
public void decrypt(List returnList)引发异常
{
迭代器itr=returnList.Iterator();
while(itr.hasNext()){
Object[]obj=(Object[])itr.next();

对于(int i=0;i您可以尝试替换列表“returnList”中的元素

@AfterReturning(value=“(执行(*search(..))”+
“&&target(com.erp.core.repo.IBaseRepository)”+
“&&args(..”,returning=“returnList”)
public void decrypt(List returnList)引发异常
{
迭代器itr=returnList.Iterator();
整数计数=0;
while(itr.hasNext()){
Object[]obj=(Object[])itr.next();
Object[]newObjects=新对象[obj.length];

对于(int i=0;i假设所有字符串都需要解密,您只需更改列表中包含的数组即可:

@AfterReturning(value="(execution(* search(..)) )" +
        "&& target(com.erp.core.repo.IBaseRepository) " +
        "&& args(..)",returning="returnList")
public void decrypt(List returnList) throws Exception
{
    for (Object [] objs : (List<Object[]>) returnList) {
        for (int i = 0; i < objs.length; i++) {
            if (objs[i] instanceof String) {
                objs[i]= EncryptUtil.decrypt(objs[i]);
            }
        }
    }
}
@AfterReturning(value=“(执行(*search(..))”+
“&&target(com.erp.core.repo.IBaseRepository)”+
“&&args(..”,returning=“returnList”)
public void decrypt(List returnList)引发异常
{
for(Object[]objs:(List)returnList){
for(int i=0;i
此方法不适用triggering@MohammedJavad啊,是的,我删除了注释,只需重新添加。请参阅我更新的答案。我已经添加了注释。但也没有触发。但当我使用我的旧方法时,它正在触发。我不知道为什么。好的。我想AspectJ没有
列出returnList
参数签名,我返回到
List returnList
并添加了一个cast。请参阅我的更新答案。
@AfterReturning(value="(execution(* search(..)) )" +
        "&& target(com.erp.core.repo.IBaseRepository) " +
        "&& args(..)",returning="returnList")
public void decrypt(List returnList) throws Exception
{
    for (Object [] objs : (List<Object[]>) returnList) {
        for (int i = 0; i < objs.length; i++) {
            if (objs[i] instanceof String) {
                objs[i]= EncryptUtil.decrypt(objs[i]);
            }
        }
    }
}