Spring(Spring的理解+DI+Spring的创建)
创始人
2024-03-02 04:15:44

目录

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 (推荐使用)

相关内容

热门资讯

一起玩耍小学生日记 一起玩耍小学生日记  晚饭过后,我正闲着无聊,叮铃铃、叮铃铃……电话铃声响了,我连忙跑过去,接起电话...
三年级小学生日记 三年级小学生日记(通用29篇)  时间过得真快,一天又过去了,这一天里,大家身边一定有一些有趣的见闻...
画单反照相机日记200字 画单反照相机日记200字  今天上午,我去大马画室画单反照相机。还记得上次我画吉普车的事情吧,吉普车...
AI宠物瞄准情感消费 7月27日,在上海世界人工智能大会上,一款AI宠物首度公开亮相,圆润萌趣的造型和类生命体的交互设计吸...
突发跳水!上演“天地板” 【导读】突发跳水!拓山重工盘中上演“天地板” 中国基金报记者 李智 一起来看下最新的市场情况及资讯。...