Spring框架的创建和使用

目录

Spring框架概述

什么是Spring框架

什么是容器

什么是IoC容器

Spring的核心功能

IoC容器和普通程序开发的区别

DI

Spring项目的创建和使用

Spring项目创建

创建一个maven项目

添加Spring框架支持

添加一个启动类

Spring项目的使用

存储Bean对象

获取并使用Bean对象

 操作流程


Spring框架概述

什么是Spring框架

我们常说的Spring指的是Spring Framework(Spring 框架),是一个开源的框架,有着活跃且庞大的社区。同时Spring还支持广泛的引用场景,它可以让Java企业级的应用程序开发更加的简单。

总体来说Spring就是包含了众多工具方法的IoC容器。

上面这句话包含了两个重要信息,也是Spring的本质。那么什么是容器,什么又是IoC容器?

什么是容器

我们回想我们之前学过得容器,是干什么的。

比如:

  • List/Map是存储数据的容器。
  • Tomcat是存储Web网站的容器。

Spring里面的容器其实也是同样的性质,都是用来存储东西的。具体存储的是就是对象。

什么是IoC容器

在我们知道了什么是容器里面存储的是对象之后,那么IoC容器又是什么呢?

IoC:翻译成中文就是控制翻转的意思,也就说Spring是一个控制翻转的容器。

控制翻转具体控制的是啥,又把什么给翻转了?

对象的生命周期:在传统的开发过程中,对象的生命周期是由程序员直接控制的。然而在Spring中,对象的生命周期不在是程序员控制了,而是交给Spring,让Spring去管理和控制对象的生命周期。Spring本身右具有存储对象和获取对象的能力。控制的就是对象,翻转的就是对象的控制权。

这里的IoC是一种设计思想。

Spring的核心功能

上述描述我们知道了Spring是一个包含了众多工具方法的IoC容器。

既然是容器,那么具备的两个基本的功能:

  • 将对象存储在容器中
  • 从容器中获取对象

也就说Spring最核心的功能就是将对象如何存储到Spring中,再从Spring中如何获取对象的过程。

IoC容器和普通程序开发的区别

将对象存储到IoC容器中的好处:将对象存储到IoC容器中相当于将以后可能会用到的所有工具都制作好放到仓库中,需要的时候直接取就好了,用完再次放到仓库中去。然后普通程序开发是每次需要工具的时候,才先做,也就是new,当这个new出来的对象用完了之后,就直接扔掉,也不会保存,如果下次需要了还得new。这就是IoC容器和普通程序开发的区别。

使用IoC容器还有一个好处就是可以实现代码之间的解耦。

DI

提到IoC,不得不提就是DI,DI是Dependency Injection的缩写,中文就是依赖注入的意思。

所谓的依赖注入,就是在IoC容器运行的过程中,动态的将某种依赖关系注入到对象之中。

依赖注入(DI)和控制翻转(IoC)都是在不同的角度描述一件事情。就是值通过引入IoC容器,利用依赖注入的方式,实现对象直接的解耦。

IoC是一种设计思想,而DI则是一种具体的实现方式。

Spring项目的创建和使用

前面我们说了那么多,那么接下来我们就创建一个Spring项目。


Spring项目创建

Spring项目是通过Maven的方式来创建一个Spring项目,创建Spring项目总共可以分为3步:

  1. 创建一个普通的maven项目
  2. 添加Spring框架支持(spring-conext、spring-beans)
  3. 添加一个启动类。

解下来我们一步一步来:

创建一个maven项目

Spring框架的创建和使用_第1张图片

点击下一步:

Spring框架的创建和使用_第2张图片 

添加Spring框架支持

在创建好的项目中,有一个pom.xml文件,在里面添加Spring框架支持,如下代码:

    
        
            org.springframework
            spring-context
            5.2.3.RELEASE
        
        
            org.springframework
            spring-beans
            5.2.3.RELEASE
        
    

从上述添加的框架中可以看出,添加的框架有spring-context和spring-beans

spring-context:   spring的上下文

spring-beans:    spring管理对象的模块

从这里就能看出spring框架与传统开发的区别就是针对对象(在spring中Bean)的管理。

添加一个启动类

最后在创建好的项目中,src/main/java这个路径中创建一个启动类,包含一个main方法即可。

public class App {
    public static void main(String[] args) {
        
    }
}

经过上述步骤之后,我们就成功的创建了一个spring项目。注意在上述创建的过程中,如果出现pom.xml文件里面爆红现象,那么就是maven的国内源没有配置上。关于maven国内源的配置,这里不在过多赘述。

Spring项目的使用

当我们在创建好了spring项目之后,我们就得使用spring项目了。

前面已经说过,spring的核心功能:

  • 存储Bean对象
  • 获取Bean对象

接下来spring的使用也将围绕着这两个Spring的核心功能来使用。

存储Bean对象

在存储Bean对象之前我们先要有Bean对象,这里Bean对象就是就是普通的对象。

我们先创建一个Bean对象:

Spring框架的创建和使用_第3张图片

 在src/main/java下面创建了如上目录。

User类如下:

package com.dgz.domo;

public class User {
    private int userId;
    private String name;

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getName() {
        return name;
    }

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

    public void sayHi() {
        System.out.println("Hi spring");
    }
    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", name='" + name + '\'' +
                '}';
    }
}

这样我们就有了一个Bean对象。

接下来我们需要把这个Bean对象存储到Spring中,在存储之前,我们需要创建一个Spring配置文件。

在resources文件夹下面创建一个spring-config.xml文件:

Spring框架的创建和使用_第4张图片

并在spring-config.xml文件里面添加如下代码:



 上述代码是固定格式,不需要记忆。

然后我们在这个配置文件注册对应的Bean对象即可。

接下来我们将User对象注册到Spring中,具体操作是在beans标签中添加一个bean标签,然后在里面添加注册User对象的属性即可。

    

 这里id就是我们在将来获取Bean对象的时候需要填写的属性。class为User这个类的具体路径。

经过上述的操作我们就将一个Bean对象完成的注册到(存储到)Spring中去了。

获取并使用Bean对象

获取并使用Bean对象一共分为3步:

  1. 得到Spring上下文对象,因为对象都交给Spring去管理了,所以获取要到Spring中获取,那么就要得到Spring的上下文对象。
  2. 通过Spring上下文对象,获取某一个指定的Bean对象。
  3. 使用Bean对象

获取Spring上下文对象

Spring上下文可以通过使用ApplicationContext来获取到。

我们在启动类中可以通过如下代码来获取上下文对象:


        //得到Spring上下文对象,创建的时候需要配置Spring的配置信息
        ApplicationContext context = new 
ClassPathXmlApplicationContext("spring-config.xml");

除了ApplicationContext之外,我们还可以使用BeanFactory来作为Spring的上下文对象。

如下代码所示:

//使用BeanFactory
        BeanFactory factory = new 
XmlBeanFactory( new ClassPathResource("spring-config.xml"));

这两个获取Spring上下文对象的区别:(面试题)

ApplicationContext和BeanFactory的区别:

  1. ApplicationContext是BeanFactory的子类,ApplicationContext拥有更多功能。
  2. 加载Bean的机制不同,BeanFactory懒加载,按需加载,(使用一个bean加载一个Bean) ApplicationContext则是一次性加载所有的Bean对象。
  3. ApplicationContext启动慢,但是启动之后获取对象非常快 BeanFactory启动快,占用内存很少,但是后期获取对象非常慢。

获取指定的Bean对象

如下代码:

public class App {
    public static void main(String[] args) {

        //得到Spring上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //使用BeanFactory
        BeanFactory factory = new XmlBeanFactory( new ClassPathResource("spring-config.xml"));

        //使用ApplicationContext的方式来获取Bean对象
        User user = (User) context.getBean("user");
    }
}

这里需要注意我们在getBean里面的参数是不是很熟悉,这个参数就是我们之前在spring-config.xml文件中配置的id属性。

这里的id要一一对应:

Spring框架的创建和使用_第5张图片

 getBean的更多用法:

getBean有很多重载的方法,我们也可以通过其他的方式来获取Bean对象,比如下面这种:

        //根据类型来获取Bean
        User user1 = context.getBean(User.class);

        //根据id+类型来获取Bean
        User user2 = context.getBean("user",User.class);

 这两种方式的区别就是当有一个类被重复的注册到spring-config.xml中的时候,就只能使用名称获取了

 我们把一个类重复的注册到spring-config.xml中,然后再通过上述两种方式来获取,就会发现报错了。Spring框架的创建和使用_第6张图片

上述这个错误就是说找到了两个user对象,但是获取的方式无法区分到底是要获取那个Bean,这时就要使用id的获取方式获取id+类型的方式。

使用Bean对象

由于我们之前已经通过各种的方式获取到了Bean对象,这时我们就能使用Bean对象了。

public class App {
    public static void main(String[] args) {
        //得到Spring上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //使用BeanFactory
        BeanFactory factory = new XmlBeanFactory( new ClassPathResource("spring-config.xml"));
        //使用ApplicationContext的方式来获取Bean对象
        //根据id来获取Bean
        User user = (User) context.getBean("user");
        //根据类型来获取Bean
       // User user1 = context.getBean(User.class);
        //根据id+类型来获取Bean
       /* User user2 = context.getBean("user",User.class);
        User user3 = context.getBean("user1",User.class);*/

        //使用Bean对象
        user.sayHi();

    }
}

Spring框架的创建和使用_第7张图片

 操作流程

Spring框架的创建和使用_第8张图片

你可能感兴趣的:(Spring,spring,java,后端)