Spring源码:XmlBeanFactory

目录

1.概述

2、XmlBeanFactory

3、示例

spring配置

Bean类

Spring启动类

运行结果

4、XmlBeanDefinitionReader


1.概述

XmlBeanFactory 继承自 DefaultListableBeanFactory, DefaultListableBeanFactory是整个bean加载的核心部分,是 Spring 注册及加载bean的默认实现。类图如下:

DefaultListableBeanFactory 实现接口 BeanDefinitionRegistry 的一些方法,具体看下经典文章:BeanDefinitionRegistry 增删改查 Bean

SimpleAliasRegistry 实现对 Bean 的别名的管理。

 

2、XmlBeanFactory

XmlBeanFactory 对DefaultListableBeanFactory进行了扩展,主要用于从 XML 配置文件中读取 BeanDefinition,对于注册和获取 Bean 都是使用父类 DefaultListableBeanFactory 继承的方法去实现。

XMLBeanFactory 中增加了 XmlBeanDefinitionReader 类型的reader 对资源文件进行读取和注册。

Resource 定位配置文件 --》 XmlBeanDefinitionReader 解析 Resource 读取注册BeanDefinition

3、示例

spring配置

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="user" class="com.suning.spring.boot.train.domain.User">
        <property name="name" value="zhangsan"/>
        <property name="id" value="1"/>
    </bean>
</beans>

Bean类

public class User {

    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

Spring启动类

DefaultListableBeanFactory defaultListableBeanFactory = new XmlBeanFactory(new ClassPathResource("application-context.xml"));
User user = defaultListableBeanFactory.getBean(User.class);
System.out.println(user);

运行结果

 

4、XmlBeanDefinitionReader

ClassPathResource封装了Spring配置

Spring配置文件封装成 Resource 后,读取工作就交给 XmlBeanDefinitionReader来处理。

XmlBeanFactory 源码

public class XmlBeanFactory extends DefaultListableBeanFactory {
    private final XmlBeanDefinitionReader reader;

    public XmlBeanFactory(Resource resource) throws BeansException {
        this(resource, (BeanFactory)null);
    }

    public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
        super(parentBeanFactory);
        // 初始化
        this.reader = new XmlBeanDefinitionReader(this);
        // 解析 Resource 并加载 BeanDefinition
        this.reader.loadBeanDefinitions(resource);
    }
}

初始化XMLBeanDefinitionReader

this.reader.loadBeanDefinitions(resource) 才是加载bean 的方法

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值