当我使用SpringAOP时,如何进行切入点休眠?
我认为这是会议的切入点,但似乎失败了。我的配置是否正确? 这是我的spring配置当我使用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
<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;
}