一直疑惑为什么启动tomcat或者jetty的时候为什么会生成项目中所有的bean,特意查了一下资料。
首先要有这个认识:
开启服务器时如果不调用spring的话,spring是不会做什么的。一般web项目会在web.xml里配置spring的加载监听。这样启动web服务器时就会加载spring的配置文件,spring的bean工厂会启动,根据配置文件中配置的bean对象的类型和属性信息,通过反射将类实例化并且将类的属性通过set方法、构造器、接口等方式设置到对象中。通过spring的getBean方法可以根据bean的id来获取到实例化后的bean对象。
spring在服务器启动时就将所有的 singleton 的 bean提前实例化,这个应该是 在web.xml中配置的 ContextLoaderListener做的。
上半部分是项目中的spring配置文件xml的路径,下半部分是spring的的监听器。
spring会根据路径加载所有的配置文件,生成bean放在容器中。可以理解为spring中的那些jar包完成了这些操作,具体的流程我还没到那部暂且不管。暂且理解为:服务器启动会加载web.xml文件,然后会调用spring的jar包中的方法来加载配置文件生成bean。
链接的文章写的具体一点可以参考