启动@Autowrid
,Maven项目与Spring 4,大约:800 ManegedBeans Spring,900 Services,1000 @Component
和1000 @Repository
,启动应用程序trhow a OutOfMemoryError
。我在Tomcat和Wildfly中增加了参数-Xms1024m -Xmx4g
,在应用程序中我在default-lazy-init = "false"
中添加了applicationContext.xml
参数,并且应用程序启动时费用很高。我想知道删除是否有任何好处
@Autowired
private AnyService anyService;
从所有类和使用
public void execute() {
AnyService anyService = (AnyService)applicationContext.getBean(AnyService.class);
anyService.execute();
}
在方法内。使用局部变量而不是实例可以优化启动吗?为GC带来一些好处?调用applicationContext.getBean(AnyService.class)可能会恶化方法的性能?
OutOfMemoryError和慢启动是两个不同的问题。我认为您不必删除@Autowired注释。
首先,您应该确定哪个bean导致缓慢加载(例如数据库连接),并在该类中添加@Lazy,您可以参考这篇文章spring-lazy-annotation-use-cases。而一些豆应首先加载Make sure a particular bean gets initialized first
其次,使用Spring XML配置而不是组件扫描或限制组件扫描范围可能会有所帮助。确保仅使用应用程序中所需的最低组件