【发布时间】:2014-05-09 04:49:10
【问题描述】:
我们已经在我们的应用程序中实现了spring AOP,而没有使用aspectj。 我们将自动代理设为 true 以使其使用 CGLIB 代理。
我们将其作为代理目标的原因 class= 'true' 以解决代理错误。作为副作用,应用程序变得缓慢并且需要更长的时间来执行。
有没有一种方法可以帮助我们保持性能不变并避免代理错误。
<!-- Aspects -->
<bean id="loggingAspect" class="web.aspect.LogAspectAroundMethod" />
<!-- PointCut -->
<bean id="myLogPointCut" class="org.springframework.aop.support.JdkRegexpMethodPointcut">
<property name="pattern" value=".*" />
<property name="excludedPatterns">
<list>
<value>.*.isDaemon.*</value>
</list>
</property>
</bean>
<!-- Advisor Around-->
<bean id="myLogAroundAdvisor" class="org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor">
<property name="adviceBeanName" value="loggingAspect" />
<property name="pointcut" ref="myLogPointCut" />
</bean>
<bean id="aprProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="proxyTargetClass" value="true"/>
<property name="beanNames">
<value>*Delegate,*Builder*,*Impl*,*Controller,*Handler,*Helper</value>
</property>
<property name="interceptorNames">
<list>
<value>myLogAroundAdvisor</value>
</list>
</property>
</bean>
顾问代码如下:-
只提供了实现部分:-
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class LogAspectAroundMethod implements MethodInterceptor{
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
Object result = methodInvocation.proceed();
return result;
}
}
【问题讨论】:
-
自动代理与 Cglib 或 JDK 动态代理无关。要么你混淆了事情,要么你想说'proxy-target-class'是
true。 -
是的,代理目标类是真的。刚刚也修改了问题。
标签: java spring proxy aop cglib