Spring(Spring的理解+DI+Spring的创建)
创始人
2024-03-02 05:56:13
0

目录

1. Spring 是什么

2. DI

3. 面试题: IoC 和 DI 有什么区别?

4. Spring 的创建

5. 将 Bean (对象) 存储到 Spring (容器) 中

6. 将 Bean (对象) 从 Spring (容器) 中取出来 

7. 面试题: ApplicationContext 和 BeanFactory的区别

8. getBean 更多用法


1. Spring 是什么

通常所说的 Spring 是 Spring Framework (Spring 框架), 

用一句话来解释 Spring: Spring 是包含了众多工具方法的 IoC 容器

那么什么是 IoC 容器? 

先来理解看一下什么是容器: 容器是用来容纳某种物品的 (基本) 装置

对比到前面的知识点,   目前接触到的容器有

  • List / Map -->  数据存储容器
  • Tomcat  -->  Web 容器

Spring 也是一个容器, Spring 是一个 IoC 容器

下面再看一下什么是 IoC ?

IoC = Inversion of Control 翻译过来就是 "控制反转" 的意思, 也就是

Spring 是一个 "控制反转" 的容器,

("控制反转":之前的控制权是在我身上,现在反转了,也就是我把控制权交出去了,交给框架了,下次我再要用X的时候,直接告诉框架,我要用X,而现在的X的生命周期和我没啥关系)

IoC 优点: 实现代码的解耦; 对象 (Bean) 生命周期交给 IoC 框架来维护,作为程序员无需再关注了

Spring IoC 容器最核心的功能:

  1. 将 Bean (对象) 存储到 Spring (容器) 中
  2. 将 Bean (对象) 从 Spring (容器) 中取出来 

Spring 是一个 IoC 容器, 说的是对象的创建和销毁的权利都交给 Spring 来管理了, 它本身又具备了存储对象和获取对象的能力. 


2. DI

说到IoC 就要提到 "DI", DI 是 Dependency Injection 的缩写,翻译过来就是 "依赖注入" 的意思

依赖:比如说A类中,需要用到B类,那就说A依赖B

注入:将一个东西拿过来用就叫做注入

合起来"依赖注入"的意思就是: 有 IoC 容器在运行期间,动态的将某种依赖关系注入到对象中.

依赖注入的角度就是,通过引用 IoC 容器,利用依赖关系注入的方式,实现对象之间的解耦,所以DI 是一种实现


3. 面试题: IoC 和 DI 有什么区别?

IoC 是一种思想: 控制反转

DI 是一种实现: 依赖注入 


4. Spring 的创建

(1) 创建一个 maven 项目

输入项目名就可以了

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

先配置镜像国内源

  alimaven  aliyun maven  http://maven.aliyun.com/nexus/content/groups/public/  central          

然后再添加Spring框架支持 

    org.springframeworkspring-context5.2.3.RELEASEorg.springframeworkspring-beans5.2.3.RELEASE

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


5. 将 Bean (对象) 存储到 Spring (容器) 中

存储 Bean 对象三步(两步)走

  1. 如果是第一次添加, 先在 spring 项目中添加配置文件
  2. 先创建一个 Bean 对象
  3. 在配置文件中将需要保存到 spring 中的 Bean 对象进行注册

(1) 在 spring 项目中添加配置文件



 (2) 创建一个 Bean 对象

(3) 在配置文件中将需要保存到 spring 中的 Bean 对象进行注册

id可以不等于 class 里面的类名,但是要尽量符合规范

类名使用大驼峰, bean id 通常使用小驼峰. 

假设类名是 UserInfo, 那么通常情况下 id 它应该是 userInfo 


6. 将 Bean (对象) 从 Spring (容器) 中取出来 

获取并使用 Bean 对象,分为以下 3 步:
  1. 先得到 spring 上下文对象(ApplicationContext / BeanFactory)
  2. 再通过上下文对象提供的方法,获取需要使用的 bean 对象
  3. 可以使用 bean 对象
import com.beans.UserBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class app {public static void main(String[] args) {// 1. 得到 spring 上下文对象ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");// 2. 根据上下文对象提供的方法,获取需要使用的 bean 对象UserBean userBean = (UserBean) context.getBean("user");// 3. 可以使用 bean 对象userBean.sayHi("张三");}
}
import com.beans.UserBean;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;public class app {public static void main(String[] args) {// 1. 得到 spring 上下文对象BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));// 2. 根据上下文对象提供的方法,获取需要使用的 bean 对象UserBean userBean = (UserBean) beanFactory.getBean("user");// 3. 可以使用 bean 对象userBean.sayHi("张三");}
}
package com.beans;
//普通的 bean 对象
public class UserBean {public void sayHi(String name) {System.out.println("你好:" + name);}
}



7. 面试题: ApplicationContext 和 BeanFactory的区别

相同点: ApplicationContext 和 BeanFactory 效果是⼀样的, 都可以实现从容器中获取 bean,都提供了 getBean 的方法.

不同点:

从继承关系和功能方面来看: BeanFactory 提供了基础的访问容器的能力,

而 Application 属于 BeanFactory 的子类,它除了继承了 BeanFactory 的所有功能外,它还拥有独特的特性,还添加了对国际化支持,资源访问支持,以及事件传播等方面的支持.

从性能方面来看: Application 是一次加载并初始化所有的 Bean 对象(饿汉方式),

而 BeanFactory 是需要哪个才去加载哪个,所以更加的轻量(懒汉方式)


8. getBean 更多用法

(1) 使用 bean name 获取 bean

 (2) 根据 bean type 获取 bean

(3) 根据 bean name 和类型获取 bean (推荐使用)

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...