最近在学习spring过程中,有人问我为什么使用<ref bean>标签时总是显示bean未定义。
为了解决这个问题,就要分析一下bean的加载机制和<ref bean>的作用范围。
首先,<ref bean>查找的范围有两个,一个是当前xml文档,另一个是和它属于同一BeanFactory中的其他javabean。
而对于bean的加载,以scope为单例为例,bean是在ApplicationContext对象创建时调用。
例如ApplicationContext context = new ClassXmlApplicationContext("a.xml");
那么这个时候只有a中的bean对象被创建,a 中的<ref bean>只能在a中查找。
而如果是ApplicationContext context = new ClassXmlApplicationContext("a.xml",”b.xml“);
a中的<ref bean>就可以在a和b中查找bean对象。
所以如果显示bean未定义时,就要注意bean的xml文件是否处于同一个ApplicationContext对象中。