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

标签 java spring proxy aop cglib

我们已经在不使用 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/

相关文章:

java - 在Spring中实例化一个新线程来定期执行任务

java - 为我正在使用的每个项目创建 Spring @Repository 和 @Controller (来自数据库)

python - 如何从 python 脚本通过 float ip 发送 Digitalocean 出站流量?

C# webclient 和代理服务器

java - 无法将 DWR 与 Spring 合并

java - Java 中为 boolean 变量赋值与赋值比较结果之间的区别

java - Autowiring 接口(interface)错误

java - Android - 显示/隐藏 ActionBar 项目时淡入/淡出

java - ScheduledExecutorService 按 1 分钟计划执行 10 分钟(systemd - 日志故障)

macos - Docker/Boot2Docker : Set HTTP/HTTPS proxies for docker on OS X