Spring框架是如何加载并解析xml配置文件?

本文详细解析了Spring框架如何加载并解析xml配置文件中的bean。从XmlBeanFactory开始,通过XmlBeanDefinitionReader的loadBeanDefinitions方法,进入DefaultBeanDefinitionDoucmentReader的registerBeanDefinitions过程。在BeanDefinitionParserDelegate的帮助下,解析Document对象,最终在DefaultListableBeanFactory中完成bean的注册。整个流程涉及到bean工厂的初始化、bean定义的读取和注册等多个关键步骤。
摘要由CSDN通过智能技术生成

早期我们使用Spring框架做开发时,经常会用到xml去配置bean,这些bean首先在xml文件里配置好,然后由Spring管理初始化,我们就可以拿来使用,那Spring框架是如何加载xml里的bean? 本篇文章将解析xml中的bean注册原理。

首先我们可以新建一个maven project,引入bean 的jar包,spring的版本就用5.3.14

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
</dependency>
复制代码

如果使用ClassPathXmlApplicationContext,那么需要引入spring-context依赖:

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
 </dependency>
复制代码

采用xml的方式配置一个bean, 定义的xml文件中需要包含beans的命名空间声明,其中 " www.springframework.org/schema/bean… " 是bean默认的命名空间地址,一定不能缺少,否则在getBean的时候会出现报错没有声明beans的问题, Spring-beans.xml文件配置如下:

<?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">

    <bean id="UserBean" class="com.example.User"></bean>

</beans>
复制代码

​编辑

新建一个User类:

package com.example;

public class User {

    public void read(){
        System.out.println("学习..");
    }
}
复制代码

由于User类已经在xml文件中配置,因此我们可以拿到User这个bean了, 可以使用的XmlBeanFactory来获取bean, 但是现在已经过时, 不推荐使用, XmlBeanFactory继承了DefaultListableBeanFactory类。

package com.example;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;

public class Main {

    public static void main(String[] args) {
        /*============================================读取xml形式========================================================*/
        // 方式一: 采用XmlBeanFactory加载xml配置,不推荐已过时
        XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-beans.xml"));
        User user = beanFactory.getBean("UserBean", User.class);
        user.read();

        // 方式二: 采用XmlClassPathApplicationContext加载
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-beans.xml");
        User user1 = applicationContext.getBean("UserBean", User.class);
        user1.read();
//        /*==================================&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值