gpt4 book ai didi

java - 在没有aspectj的情况下,使用cglib或jdk代理的spring aop哪个是高性能的?

转载 作者:行者123 更新时间:2023-11-29 08:49:12 25 4
gpt4 key购买 nike

我们已经在不使用 aspectj 的情况下将 spring AOP 实现到我们的应用程序中。我们将自动代理设置为 true 以使其使用 CGLIB 代理。

之所以我们把它做成代理 objective-c lass='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 代理在内部使用反射(参见 Spring 的 JdkDynamicAopProxy),CGLIB 代理直接通过生成的代码调用目标方法

关于java - 在没有aspectj的情况下,使用cglib或jdk代理的spring aop哪个是高性能的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23556819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com