2、Resource 及 引出IOC 核心内容

本文详细介绍了Spring框架中的Resource接口,展示了如何通过不同实现类读取配置文件并转化为BeanDefinition对象,重点讲解了XmlBeanFactory工厂如何通过InputStream读取配置,以及Bean的生命周期管理。
摘要由CSDN通过智能技术生成

前言:

上篇文章记录了spring工厂的概念和结构体系,且提到了 XmlBeanFactory 工厂。接下来详细学习这个底层的spring工厂。

此篇文章将介绍Resource接口和引出Spring IOC 工厂的核心内容

spring高级工厂和原始底层工厂读取配置文件的方式:

//高级工厂读取配置文件的方式:
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) ctx.getBean("u");

//原始底层工厂读取配置文件的方式:
//1. 读取XML配置文件,XML配置文件 封装 Java对象 ---> 创建工厂生产的对象
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
//2. 从工厂容器中获得对象
User user = (User) beanFactory.getBean("u");

ClassPathResource读取xml配置文件,源码:

此处只截取了核心的参数,看到如下三个参数,各位读者心中应该基本有个大概的认知。

public class ClassPathResource extends AbstractFileResolvingResource {
    //文件路径
    private final String path;
    
    //类加载器
    @Nullable
    private ClassLoader classLoader;
    
    //class类
    @Nullable
    private Class<?> clazz;
    
}
  1. Resource读取配置文件的方式:通过类加载器的方式获取输入流
  2. 此类实现了最核心的一个接口Resource。

Resource接口:

作用:读取相关资源文件的内容获得输入流,能读取的东西有:

  1. 文件 xml 、properties、txt等文件资源。
  2. 网络中的资源。

Resource接口还有个父接口:InputStreamSource

InputStreamSource接口有个方法getInputStream(),这个方法的作用是获取文件的输入流,无论是什么资源,我们需要关注的只是其输入流。

public interface InputStreamSource {
    InputStream getInputStream() throws IOException;
}

此接口的子接口有如下:其中就有关于获取http资源的,file资源的,等等。

其中几个主要的子实现类有:

  1. FileSystemResource:通过文件系统获取输入流
  2. ClassPathResource:通过类获取输入流
  3. ByteArrayResource:通过字节数组获取输入流
  4. ServletContextResource :servlet上下文获取输入流

通过使用Resource对象,我们可以轻松地读取到我们在xml中配置的bean,并将其加载到JVM虚拟机中。最终,这些bean将被封装为BeanDefinition对象,以对象的形式在虚拟机中体现。

XmlBeanFactory工厂的核心内容:读取xml配置文件,创建对应的对象。

综上所述,无论通过哪种子实现类获取输入流,最终我们需要关注的只是这个输入流,我们只要读取这个输入流即可,就能封装我们想要的BeanDefinition对象。

Spring IOC 工厂部分的核心内容

XmlBeanFactory的使用:

//1. 通过Resource读取XML配置文件,XML配置文件 封装 Java对象 ---> 创建工厂生产的对象
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
//2. 从工厂容器中获得对象
User user = (User) beanFactory.getBean("u");

Spring IOC 的核心

使用XmlBeanFactory时的步骤以及一些细节,值得思考,如下:

  1. 第一步:通过Resource接口的实现类读取文件,获取一个InputStream输入流
    1. 问题:怎么读取配置文件 ,怎么获得IO资源 。
  2. 第二步:根据读取的输入流,用 XmlBeanDefinitionReader 这个类将输入流的数据封装成 BeanDefinition对象。这个对象包含所有关于创建bean对象时的配置信息。
    1. 问题:获取输入流后,如何在Spring中以对象的形式进行封装。
  3. 第三步:根据封装成的BeanDefinition对象,也就是根据配置信息创建真正的实例对象。
    1. 问题:如何根据BeanDefinition对象创建真正的实例对象。
  4. 第四步:完成所创建对象的生命周期 。
    1. 此对象的生命周期是怎样的。

如上这些值得思考的细节也就是 Spring IOC 的核心。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值