因为在beans.xml配置文件中写了 <context:component-scan base-package="com.bjsxt"/>
所以在 ClassPathXmlApplicationContext文件初始化的时候,就是下面标注的那条这句
这个文件去读beans.xml文件,因为在这个文件写了component-scan,所以他会去扫描com.bjsxt这个包下所有的类,他扫描的时候主要扫描看哪个包中哪个类的头上写了@Component,如果写了,他就会帮这个类初始化一个对象,他的key就是@Component指定的的名字,如果没有写名字,他的key就是这个类名首字母改成小写。
当我们在测试类中使用getBean("userService")去拿bean的时候,他就会去容器里面找是否有一个叫userService的对象,我们这里写了@Component("userService"),所以就找到了userService的对象。在初始化这个对象的过程中,由于在这个类的一个方法public void setUserDAO(UserDAO userDAO){this.userDAO=userDAO;}头上写了@Resource(name="u"),如下图所示,他又会在容器中找有没有名字为u的那个bean,如果找到的话把他注入到参数userDAO中,参数再传进来,当然就注入到成员变量里了。