早期我们使用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(); // /*==================================&#