Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
当我使用SpringAOP时,如何进行切入点休眠?_Spring_Aop_Spring Aop - Fatal编程技术网

当我使用SpringAOP时,如何进行切入点休眠?

当我使用SpringAOP时,如何进行切入点休眠?,spring,aop,spring-aop,Spring,Aop,Spring Aop,我认为这是会议的切入点,但似乎失败了。我的配置是否正确? 这是我的spring配置 <bean id="aspect" class="org.bigbean.common.aop.DaoAspect" /> <aop:config> <aop:aspect ref="aspect"> <aop:around pointcut="execution(* org.hibernate.SharedSessionContra

我认为这是会议的切入点,但似乎失败了。我的配置是否正确? 这是我的spring配置

<bean id="aspect" class="org.bigbean.common.aop.DaoAspect" />
<aop:config>
    <aop:aspect ref="aspect">       
        <aop:around pointcut="execution(* org.hibernate.SharedSessionContract.createQuery(java.lang.String))"
            method="aroundAdvice" />
    </aop:aspect>
</aop:config>
除非使用or,否则Spring AOP是基于代理的。这意味着您只能在Spring创建的对象(即Springbeans)中使用切入点。您正在尝试切入一个内部Hibernate对象,该对象很可能是在Hibernate内部使用普通的
new SharedSessionContract()
构造创建的

    public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
    System.out.println("aroundAdvice");
    String hql = (String) pjp.getArgs()[0];
    if(hql.indexOf("update") > -1){
        StringBuilder sb = new StringBuilder();
        int temp = hql.indexOf("where");
        if(temp > -1){
            sb.append(hql.subSequence(0, temp));
            sb.append(",updateDate = :updateDate ");
            sb.append(hql.substring(temp));
        }else{
            sb.append(",updateDate = :updateDate ");
        }
        hql = sb.toString();
        mark = true;
    }
    Object retVal = pjp.proceed(new Object[] { hql });
    return retVal;
}