我们使用的是Spring(3.0.5)AOP,@AspectJ
样式注释和<aop:aspectj-autoproxy/>
。我们将它用于交易,审计,分析等。它可以很好地工作,只是随着更多代码的添加,应用程序的启动时间不断增长。Spring AOP慢启动时间
我已经做了一些分析,发现大部分时间都花在Spring容器初始化期间,更具体地说是org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(String, ObjectFactory)
- 大约需要35秒。 org.springframework.aop.support.AopUtils.canApply(Pointcut, Class, boolean)
- 大约需要15秒。
我的目标是让应用程序在5-10秒内启动,而不是像现在这样启动约45秒,因此任何提示都将非常感谢。
跳转到结论的Spring AOP导致启动性能匆忙的结论。(考虑到编织在运行时发生)。您是否使用Jconsole或visualVm检查了JVM的统计信息。你有一些自定义的init方法吗?你有没有尝试使用延迟初始化。 (通过bean中的lazy-init属性)? – 2011-01-21 05:46:19
这些是我将遵循的步骤。 1-正常加载时检查JVM统计信息。 2.将bean lazy-init属性设置为默认值,然后再次检查jvm stat(内存使用率等)。 3-如果仍然没有显着的改善,我会关闭方面autoproxying。就像我刚才提到的那样,如果我必须下注,我会准备好下注,它不会影响加载时间的AOP编织。 – 2011-01-21 05:46:34
我非常确定这是编织,因为我花了很多时间用Yourkit进行分析,在启动时只采用线程转储,并将一些断点和所有点放在AOP编织中。但是当你说关机方面autoproxying你建议的选择是什么时,我很好奇?谢谢,尤瓦尔 – 2011-01-22 22:10:58