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

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

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


一、创建 Spring 项目

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

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

1、先创建一个 maven 项目

如何MAVEN下添加flink maven添加spring_java

如何MAVEN下添加flink maven添加spring_容器_02


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

如何MAVEN下添加flink maven添加spring_java_03

——导入成功:

如何MAVEN下添加flink maven添加spring_如何MAVEN下添加flink_04


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、添加配置文件

如何MAVEN下添加flink maven添加spring_java_05

创建 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 方法,实现代码如下:

如何MAVEN下添加flink maven添加spring_后端_06


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

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

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

如何MAVEN下添加flink maven添加spring_java_07


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

1、先得到 spring 上下文对象

——使用 ApplicationContext

如何MAVEN下添加flink maven添加spring_容器_08


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

如何MAVEN下添加flink maven添加spring_后端_09


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

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

如何MAVEN下添加flink maven添加spring_后端_10


四、注意问题

1、ApplicationContext VS BeanFactory

1.1、对比

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

如何MAVEN下添加flink maven添加spring_如何MAVEN下添加flink_11

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

如何MAVEN下添加flink maven添加spring_后端_12

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

运行程序,没有加载对象

如何MAVEN下添加flink maven添加spring_spring_13

BeanFactory 需要那个才去加载那个

如何MAVEN下添加flink maven添加spring_容器_14


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>

运行结果:

如何MAVEN下添加flink maven添加spring_后端_15

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

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

4、总结

  • 操作容器之前,先要有容器,所以先要得到容器
  • 存对象
  • 创建 Bean(普通类)
  • 将 Bean 注册(配置)到 spring-confing.xml 中
  • 取对象
  • 得到 Spring 上下文,并读取到 Spring 的配置文件
  • 获取某⼀个 Bean 对象
  • 使用 Bean 对象

操作流程如下图所示:

如何MAVEN下添加flink maven添加spring_容器_16