第一章 Spring容器环境搭建及基本使用

第一章 Spring容器环境搭建及基本使用

本章讲述什么:
1.介绍Spring框架的简单使用,这个使用是基于SpringXML的一种使用方式。
2.讲述Spring IoC中的一些核心对象的作用。

1.1 Spring容器环境搭建使用

先搭建一个Spring基本工程,该工程可以从Spring容器中获取一个Bean,不含其他复杂的操作。

在这里插入图片描述
图 1.1 选择 Module 工程

单击Module后单击Gradle选项,勾选Java复选框(默认会勾选,无须点击),再单击Next按钮进入下一步。

在这里插入图片描述
图 1.2 选择 Gradle 和 Java工程(本文采用Gradle来代替Maven,你可以根据自己的爱好选择自己喜欢的。)

在这里插入图片描述
图 1.3 输入 Name 等属性

Spring 基本代码编辑

1.编写几个基本类和配置文件。
2.首先在build.gradle文件中添加Spring相关的依赖:
	spring-context 和 spring-core(这两个依赖是Spring中的最小依赖单元)。
编写后的build.gradle文件内容如下。
如果直接导入spring源码,就直接使用图中已被注释的部分。这个不需要写版本。

在这里插入图片描述

plugins {
    id 'java'
}



group 'org.springframework'
version '5.2.3.RELEASE'

repositories {
    mavenCentral()
}

dependencies {
   /* compile(project(":spring-context"))
    compile(project(":spring-core"))*/
    compile group: 'org.springframework', name: 'spring-core', version: '5.2.3.RELEASE'
    compile group: 'org.springframework', name: 'spring-context', version: '5.2.3.RELEASE'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}

test {
    useJUnitPlatform()
}

编写配置文件后,创建一个bean实体。

package com.example.bean;

import lombok.Getter;
import lombok.Setter;

/**
 * @Author 沧海轻舟
 * @Date 2022/12/2 10:21
 * @Description 歌曲类
 */
@Setter //这里我直接使用注解
@Getter
public class Song {
    private String name;
 /* public String getName() {
        return name;
    }

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

<?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="song" class="com.example.bean.Song">
        <property name="name" value="jiekou"/>
    </bean>

</beans>

使用ClassPathXmlApplicationContext作为容器对象
在这里插入图片描述
使用FileSystemXmlApplicationContext作为容器对象
在这里插入图片描述
当然还有一种:XmlBeanFactory,这个类上面标记了废弃注解,他继承了DefaultListableBeanFactory,而 DefaultListableBeanFactory是 整个 bean加载的 核心部分,是Spring注册及加载bean 的默认实现。

而对于 XMLBeanFactory与 DefaultListableBeanFactory 不同的地方:
【1】XMLBeanFactory中使用了 自定义的 XML读取器 XMLBeanDefinitionReader, 实现了个性化的 Bean
【2】DefaultableBeanFactory 继承了 AbstractAutowireCapableFactory 并 实现了 ConfigurableistableBean 以及 BeanDefinitionRegistry接口
在这里插入图片描述
在这里插入图片描述
由上述图中使用了 new ClassPathResource进行封装来读取配置文件。我们来分析ClassPathResource完成了什么功能?
1. 在Java中,将不同来源的资源抽象为 URL, 通过注册不同的 handler (URLStreamHandler) 来处理 不同来源 的 资源的 读取逻辑,
2. 一般handler 的类型使用不同前缀(协议, Protocol)来识别,如 file: http: jar: 等, 然而 URL 没有默认 定义相对 Classpath 或者 ServletContext 等资源的 handler。
3. 虽然可以注册自己的URLStream来解析 特定的 URL前缀(协议), 比如: classpath: 。 然而这需要了解URL的实现机制。并且URL也没有提供基本的方法, 比如 检查当前资源是否存在 检查当前资源是否可可读 等方法
4. 因此,Spring 对其内部使用到的资源实现了自己的抽象结构: Resource 接口封装底层资源
5. Resource接口抽象了所有Spring内部使用到的底层资源:File URL Classpath等,它定义了三个判断当前资源的方法:·存在性(exists) 可读性(isReadable) 是否处于开放状态(isOpen)

通过测试得出结论(Spring IoC容器上至少具备以下两种功能):

	1.读取Spring XML配置文件。
	2.从容器中获取实例,获取bean实例。

1.3 Spring 核心类

SpringIoC容器入口的三个核心对象:
	【1】ClassPathXmlApplicationContext
	【2】XmlBeanFactory
	【3】FileSystemXmlApplicationContext

在这里插入图片描述
图 1.4 ClassPathXmlApplicationContext 类图

在这里插入图片描述
图 1.5 FileSystemXmlApplicationContext 类图
在这里插入图片描述
图 1.6 XmlBeanFactory 类图

【1】Resource: Spring中 资源的定义 接口
【2】ResourceLoader:该对象提供了 资源加载 的方法,主要应用于根据 给定的资源文件地址 返回对应的 Resource
【3】BeanDefinitionReader: 该对象提供了 读取资源对象 到 Bean定义 的方法
【4】DocumentLoader: 该对象提供了将 资源文件 转换为 Document对象 的方法
【5】BeanDefintionDocumentReader: 该对象提供了将 Document对象读取 并 注册到容器 的方法
【6】EnvironmentCapable: 该对象提供了 获取环境配置 的方法
【7】AliasRegistry: 该对象提供了关于 Alias 的 增 删 改 查 方法
【8】SingletonBeanRegistry: 该对象 提供了 单例bean 的 增 删 改 查 方法
【9】BeanDefinitionRegistry: 该对象 提供了 bean定义 的 增 删 改 查 方法
【10】BeanFactory: 该对象提供了获取bean实例的方法
【11】HierarchicalBeanFactory: 该对象在 父BeanFactory 的基础上 提供了 父BeanFactory的支持
【12】ConfigurableBeanFactory: 该对象提供了 对 BeanFactory的设置方法, 在其中可以设置 关于 类加载器、转换服务配置信息
【13】AutowireCapableBeanFactory: 该对象提供了创建bean 注入Bean Bean后置处理器(BeanPostProcessor) 销毁Bean 等方法
【14】ApplicationContext: 应用上下文核心接口,各类上下文实现类都是 它 的 实现了
【15】ConfigurableApplicationContext:L 该对象提供了 配置应用上下文属性的方法
【16】ListableBeanFactory: 该对象提供了搜索 bean 的方法。 从 容器中获取 关于 bean的配置
【17】Lifecycle: 该对象提供了关于 容器的生命周期方法

对于上述17个接口做出 5种 分类
【1】资源及资源处理类。该分类有:Resource 和 ResoureLoader

【2】处理注册的类。该分类有

		1. alias(AliasRegistry)   
		2. Bean定义注册(BeanDefinitionRegistry)  
		3. 单例bean的注册(SingletonBeanRegistry)

【3】关于生命周期相关的分类,该分类还可以细分为以下两类:

	1 .容器的生命周期,容器生命周期的核心接口为Lifecycle
	2. bean的生命周期, bean的生命周期的接口有 InitializingBean 
	和 DisposableBean 等

【4】bean的扩展,该分类有 BeanPostProcessor 和 Aware 系列接口

【5】上下文相关分类。 该分类以 ApplicationContext 作为主导接口。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拭去心尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值