Spring 的创建和使用

本文介绍了如何创建Spring项目,通过Maven添加Spring框架支持,然后详细阐述了如何创建Bean对象并将其通过配置文件注册到Spring容器中,以及如何从容器中读取Bean对象。同时,文章对比了ApplicationContext和BeanFactory的区别,并展示了getBean方法的不同用法。
摘要由CSDN通过智能技术生成

Spring 就是一个包含了众多工具方法的 IoC 容器。既然是容器那么它就具备两个最基本的功能

将对象存储到容器(Spring)中;
从容器中将对象取出来

在 Java 语言中对象也叫做 Bean,所以后面咱们再遇到对象就以 Bean 著称


一、创建 Spring 项目

使用 Maven 方式来创建⼀个 Spring 项目,创建 Spring 项目和 Servlet 类似,总共分为以下 3 步:

  • 创建⼀个普通 Maven 项目
  • 添加 Spring 框架支持(spring-context、spring-beans)
  • 添加启动类

1、先创建一个 maven 项目

在这里插入图片描述

在这里插入图片描述


2、添加 spring 框架支持 (spring-context / spring-beans)

在项目的 pom.xml 中添加 Spring 框架的支持,xml 配置如下:

        <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>

从上述配置中可以看出,添加的框架有 spring-context:spring 上下文,还有 spring-beans管理对象的模块

——如果一直不成功,可以配置国内的源:

设置 Settings & New Projects Settings 选中,配置文件 settings.xml

在这里插入图片描述

——导入成功:

在这里插入图片描述


3、创建一个启动类并添加 main

在创建好的项目 java 文件夹下创建一个启动类,包含 main 方法即可

public class App {
    public static void main(String[] args) {
        System.out.println("hello spring");
    }
}

二、存储 Bean 对象

存储 Bean 分为以下 2 (/3) 步:

  1. 如果是第一次添加,先在 spring 项目中添加配置文件,非第一次此步骤省略
  2. 存储 Bean 之前,先得有 Bean 才行,因此先要创建一个 Bean 对象
  3. 在配置文件中将需要将创建的 Bean 对象注册到 Spring 容器中

1、添加配置文件

在这里插入图片描述

创建 spring-config.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">

</beans>

2、创建一个 Bean 对象

Bean 就是 Java 语言中的一个普通对象,创建 User 类,写一个 sayHi 方法,实现代码如下:

在这里插入图片描述


3、将 bean 通过配置文件注册到 spring 中

在创建好的项目中添加 Spring 配置文件 spring-config.xml,将此文件放到 resources 的根目录下:

PS: id 可以不等于 class 里面的类名的,但是要尽量符合规范
类名使用大驼峰,bean id 通常使用的是小驼峰。假设类名是 UserInfo,那么通常情况下 id 它应该是 userlnfo

在这里插入图片描述


三、从 spring 中将 bean 对象读取出来

1、先得到 spring 上下文对象

——使用 ApplicationContext

在这里插入图片描述


2、通过上下文对象提供 getBean() 获取需要使用的 bean 对象

在这里插入图片描述


3、使用 bean 对象【可选步骤】

使用 bean 对象 调用我们上面在 User 中写得 sayHi 方法,运行结果:hello: 张三!

在这里插入图片描述


四、注意问题

1、ApplicationContext VS BeanFactory

1.1、对比

除了 ApplicationContext 之外,我们还可以使用 BeanFactory 来作为 Spring 的上下文,如下代码所示:

在这里插入图片描述

ApplicationContextBeanFactory 效果是⼀样的,ApplicationContext 属于 BeanFactory 的子类,它们的区别如下:

ApplicationContext VS BeanFactory:(常见面试题)

——相同点:

  • 都可以实现从容器中获取 bean 对象,都提供了 getBean 方法

——不同点:

  • 继承关系和功能方面来说:
    • Spring 容器有两个顶级的接口:BeanFactoryApplicationContext
    • 其中 BeanFactory 只提供了基础的访问容器的能力 getBean() 方法,而 ApplicationContext 属于 BeanFactory 的子类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化支持、资源访问支、以及事件传播等方面的支持。
  • 从性能方面来说:ApplicationContext一次性加载并初始化所有的 Bean 对象,而 BeanFactory需要那个才去加载那个,因此更加轻量

1.2、验证

——创建 Article 类,代码如下:

package com.beans;

public class Article {
    public Article() {
        System.out.println("加载了 Article");
    }

    public void sayHi() {
        System.out.println("hello Article");
    }
}

——修改 User 类,代码:

package com.beans;

public class User {
    public User() {
        System.out.println("加载了 User");
    }

    public void sayHi(String name) {
        System.out.println("hello: " + name + "!");

    }
}

——将 Article 对象存储到容器中,在 spring-config.xml 中添加:

<bean id="article" class="com.beans.Article"></bean>
  • 使用 ApplicationContext 得到上下文对象:

证实 ApplicationContext 是一次性加载并初始化所有的 Bean 对象

在这里插入图片描述

  • 使用 BeanFactory 得到上下文对象:

运行程序,没有加载对象

在这里插入图片描述

BeanFactory 需要那个才去加载那个

在这里插入图片描述


4、getBean 方法的更多用法

1、使用 bean name 获取 bean

User user = (User) context.getBean("userInfo");

2、根据 bean type 获取 bean

User user = context.getBean(User.class);
  • 写法简单,但容易出问题。当同一个类型被注入到 spring 中多次(多个) 时候,就会报错。

在配置文件中加入这两条:

<bean id="userInfo" class="com.beans.User"></bean>

<bean id="user" class="com.beans.User"></bean>

运行结果:

在这里插入图片描述

3、根据 bean name 和类型获取 bean

User user = context.getBean("user", User.class);

4、总结

  • 操作容器之前,先要有容器,所以先要得到容器

  • 存对象

    • 创建 Bean(普通类)
    • 将 Bean 注册(配置)到 spring-confing.xml 中
  • 取对象

    • 得到 Spring 上下文,并读取到 Spring 的配置文件
    • 获取某⼀个 Bean 对象
    • 使用 Bean 对象

操作流程如下图所示:

在这里插入图片描述


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

三春去后诸芳尽

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

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

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

打赏作者

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

抵扣说明:

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

余额充值