我正在尝试将Spring集成到一个包含数千个类的相当大的应用程序中,并且由于组件扫描,我在启动容器时遇到了巨大的延迟.
我已经收窄,以减少在扫描无关目录浪费的时间,在"基本包"规定,到最低目录的数量,但初始化的类路径扫描部分仍需要大约1-2分钟.
那么,有没有办法优化扫描过程?我曾想过将候选类路径存储在一个文件中,然后让容器从文件中获取它们,而不是每次启动都扫描类路径,但我真的不知道从哪里开始,或者甚至可能.
任何建议都非常感谢.提前致谢.
编辑:加载Bean定义形成自动生成XML文件,减少了弹簧引导时间9〜10秒这证实了各组分的类路径扫描使用由Spring反射API是启动延迟的主要来源.
至于生成xml文件,这里是代码,因为它可能对有相同问题的人有帮助.
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
public class ConfigurationWriter {
public ArrayList<String> beanDefinitions = new ArrayList<String>();
public ConfigurationWriter() {
// the context loaded with old fashioned way (classpath scanning)
ApplicationContext context = SpringContainerServiceImpl.getInstance().getContext();
String[] tab = context.getBeanDefinitionNames();
for (int i = 0; i < tab.length - 6; i++) {
Class clazz = context.getType(tab[i]);
String scope = context.isPrototype(tab[i]) ? "prototype" : "singleton";
String s = "<bean id=\"" + tab[i] + "\" class=\"" …Run Code Online (Sandbox Code Playgroud) 我正在尝试将Spring框架集成到包含数千个pojos的现有项目中。
编写xml配置文件或遍历每个文件并为类添加注释将是一项艰巨的耗时任务,因此,有没有一种方法可以使Spring扫描程序包并仅基于名称约定来标识bean?