Spring源码分析-2 Spring的简单使用和原理分析

导读:

  1. 案例分析Spring最基础的容器XmlBeanFactory
  2. 对比Spring基础容器XmlBeanFactory和Spring高级容器ApplicationContext
  3. 分析Spring的工作原理是怎样的,初步了解这一个过程

1. Spring基础容器XmlBeanFactory的简单使用

从一个简单的demo开始,作为Spring源码分析的入口,首先,在IDEA中创建一个简单的Maven工程,引入如下依赖:

        <dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.2.6.RELEASE</version>
		</dependency>

众所周知,Spring其实就是一个容器,容器中装的就是一个个的bean。Spring的初衷就是想要让bean成为一个简单的java对象。这里我们创建一个Student类作为Spring的bean:

public class Student {

    private String name = "ruyuan";

    public String getName() {
        return name;
    }

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

Student这个bean创建好之后,想要将其添加到Spring容器中。需要在Resource目录下,创建一个xml文件 applicationContext.xml ,然后在 applicationContext.xml 中通过bean 标签配置 Student类:

<?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="student" class="com.spring.entity.Student"></bean>
</beans>

可以看到,通过 bean 标签中的 class 属性,我们配置了 Student 类的全限定名,而 id 属性的值就是告诉 Spring 容器这个 bean 名称是什么,方便后续从 Spring 容器中获取这个 bean。

@SuppressWarnings("all")
public class BeanFactoryDemo {

    public static void main(String[] args) {
        XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
        Student student = (Student) beanFactory.getBean("student",Student.class);
        System.out.println(student.getName());
    }
}

可以看到,首先通过 ClassPathResource 封装了 applicationContext.xml 配置文件,然后将 ClassPathResource 作为 XmlBeanFactory 的构造方法的参数创建 XmlBeanFactory,XmlBeanFactory 可以理解为就是 Spring 的容器,是用来存放 bean 的地方。

接着,从 XmlBeanFactory 容器中,获取名称为 student 的 bean,运行一下就可以在控制台上打印出“ruyuan”,Spring容器XmlBeanFactory最基础的使用也就是这样了。

2. XmlBeanFactory 和 ApplicationContext 的对比

在公司开发过程中,一般以ApplicationContext 作为Spring 的容器,而XmlBeanFactory 则比较陌生。这里可以将 XmlBeanFactory 理解为一个基础的 bean 容器,它的功能比较简单,而 ApplicationContext 相对于 XmlBeanFactory 而言算是一个高级的容器了

3. XmlBeanFactory 的工作原理分析

首先,通过ClassPathResource 将 applicationContext.xml 配置文件封装起来,我们可以知道的是,ClassPathResource 肯定会从 resource 目录下解析配置文件,从配置文件中解析 bean 标签,并获取 bean 标签上的 id 属性和 class 属性的值。

通过 class 属性的值即全限定名称,就可以通过反射创建 bean,也就是创建了一个 Student对象出来,然后再将 Student 对象放到 Spring 容器当中,Student 对象在容器中的名称为属性 id 的值,Spring 容器的初始化简单来说就是干这些事。

然后,当我们调用 getBean 方法时就会从 Spring 容器中加载 bean 了,Spring 会根据给定 bean 的名称到 Spring容器中获取bean,比如,demo中就是通过student这个名称,从Spring容器中获取Student对象。

以上,就是Spring的核心功能的简述。但,不管是配置文件的解析,还是从Spring容器中获取bean,每个步骤都是非常复杂的流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值