您现在的位置是:首页 >学无止境 >Spring的创建和使用网站首页学无止境

Spring的创建和使用

哔卟哔卟_: ) 2024-09-21 00:01:02
简介Spring的创建和使用

?Spring的创建

创建Maven项目


在这里插入图片描述

在这里插入图片描述

引入Spring依赖


添加如下代码至pom.xml文件中

<dependencies>

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

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>

</dependencies>

在这里插入图片描述

如果Jar包下载失败
可以参考这篇文章

添加启动类


在这里插入图片描述

?Spring的使用


Spring 是包含众多工具方法的IOC容器

Spring 作为一个容器. 最基本的功能为

  • 将对象存入到容器
  • 从容器中取出对象

在 Java 中, 可以将对象称为 Bean

存储Bean


存储 Bean 可以分为2个步骤

  • 创建 Bean
  • 将 Bean 存储至 Spring

创建 Bean?


public class User {
    public String sayHi() {
        return "hi!";
    }
}

将 Bean 存储至 Spring?


存储之前, 需要在 resources 下创建xml文件用于声明Spring(指引 Spring 的后续操作)

在这里插入图片描述

复制如下代码至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"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
</beans>

在这里插入图片描述

将 Bean 存储至 Spring

<bean id="user" class="test.User"></bean>

在这里插入图片描述

注意?

<bean id="" class=""></bean>

  • id
    • id 是对 Bean 的编号, 此处的 id 不允许重复
    • 通常情况下, 存储 Bean 是为了能够将其获取, 而获取 Bean 依赖其对应的 id(编号)
  • class
    • class 是指 Bean 的类型, 如果 Bean 存储在某一包(Package)下, 需要在前面添加包的包名, 用.分隔
    • 例如 User 存储在 test 包下, 其 class="test.User"
  • 不省略 id 和 class
    • 无论 class 是否相同, 只要 id 不同便不会报错(通过 Id 获取 Bean)
    • 只要 class 相同, 无论 id 是否相同都会报错(通过 类型 获取 Bean)
  • 省略 class 不省略 id 运行时会报错
  • 省略 id 不省略 class
    • 只有一个该类型时运行不会报错(类型不同)
    • 有多个该类型时运行会报错(类型相同)
    • 此处的类型包含包名

对于省略 id 不省略 class 的解释?

类型(包名 + 类型)不同, 其运行时不会报错

包名 test1, test2
类型 User

<bean class="test1.User"></bean>
<bean class="test2.User"></bean>

类型(包名 + 类型)相同, 运行时会报错

包名 test
类型 User

<bean class="test.User"></bean>
<bean class="test.User"></bean>

获取Bean


获取 Bean 可以分为2个步骤

  • 获取 Spring
  • 从 Spring 中读取 Bean
  • 使用 Bean(非必须)

获取 Spring?

  • 通过ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");获取
  • 通过BeanFactory context = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));获取

注意?

configLocation 需要对应 resources 下的 xml 文件

在这里插入图片描述

在这里插入图片描述

对比ApplicationContext与BeanFactory


相同点?

  1. 都可以获取 Spring
  2. 都是 Spring 的顶级接口(包含众多的方法)

ApplicationContext

在这里插入图片描述

BeanFactory

在这里插入图片描述

不同点?

  1. 继承关系
    ApplicationContext 属于 BeanFactory 的子类
  2. 功能
    BeanFactory 只有最基础的访问 Bean 的能力
    ApplicationContext 除了拥有 BeanFactory 的功能之外, 还包含更多的功能
    例如国际化?支持, 资源访问, 事件传播…
  3. 性能
    ApplicationContext 的加载方式是将 Bean 一次性加载(饿汉模式)
    BeanFactory 的加载方式是当需要某个 Bean 时再去加载所需的 Bean(懒汉模式)

继承关系

在这里插入图片描述

在这里插入图片描述

从 Spring 中读取 Bean?

  • 根据 Id 获取 Bean
    User user = (User) context.getBean("user");
    • 需要将获取结果进行强转
    • user(Id)
  • 根据 类型 获取 Bean
    User user = context.getBean(test.User.class);
    • test.user(test 包名 / user 类型)
  • 根据 Id + 类型 获取 Bean
    User user = context.getBean("user", test.User.class);

建议使用 Id + 类型 的方式获取 Bean

对于根据 Id 获取 Bean
当 getBean 的结果为其他引用类型时, (User)其他引用类型 → Error

对于根据 类型 获取 Bean
当 xml 文件中注入多个相同的类型时(不考虑包的情况) → Error

?总结


  1. 操作容器之前, 需要先有容器(创建 Spring 项目)
  2. 容器的基本功能 — 存对象(存储 Bean)
    • 创建 Bean
    • 将 Bean 存储至 Spring
  3. 容器的基本功能 — 取对象(获取 Bean)
    • 获取 Spring
    • 从 Spring 中读取 Bean

在这里插入图片描述

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。