spring之Bean实例化基本流程简单介绍

      spring容器在进行初始化时,会将xml中配置的<bean>的信息封装成一个BeanDefination对象,所有的BeanDefination存储到一个名为BeanDefinationMap(在BeanFactory中维护)的Map集合中,Spring框架对BeanDefinationMap进行遍历,通过反射创建Bean实例对象,将创建好的对象放到一个名为singletonObjects(在BeanFactory中维护)的Map集合中,当调用getBean方法时,从singletonObject的Map集合中取出对应的实例对象Bean返回。具体如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--配置UserServiceImpl-->
    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
        <!--1.name对应的值是UserServiceImpl中setUserDao的userDao  2.ref对应的值是UserServiceImpl中setUserDao方法的参数即 UserDao 对象,也就是 配置UserDaoImpl -->
        <!--依赖注入DI  中 set方法注入-->
        <property name="userDao" ref="userDao"></property>
    </bean>

    <!--配置UserDaoImpl-->
    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>

</beans>
public class ApplicationContextTest {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
        UserDao userDao = (UserDao) applicationContext.getBean("userDao");
        System.out.println(userDao);
    }
}

  • 1.加载配置文件,解析配置中的每个<bean>信息,封装成一个个对应的BeanDefination对象(根据上面的配置文件,会生成2个BeanDefination对象);
  • 2.将所有的BeanDefination对象存储在一个名为BeanDefinationMap的Map<String,BeanDefination>中;
  • 3.applicationContext 底层遍历 BeanDefinationMap,创建Bean实例对象;
  • 4.将创建好的Bean实例对象放到一个名为singletonObjects的Map<String,Object>中;
  • 5.当执行applicationContext.getBean(beanName)方法时,在singletonObjects中根据beanName获取对应的Bean实例对象;

图解如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值