认识Spring(1)

简介: 认识Spring(1)

🧁1.理解Spring和IOC


上一期的学习我们知道了什么是Spring,是包含了众多工具方法的IOC容器,作为一个容器,要具备的容器的功能是:


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


Spring最核心的功能就是将对象存入到Spring中,再从Spring中获取对象的过程


Bean定义:

在Spring中,我们把对象叫做Bean,Bean就是Java中的普通对象 Spring(ioc容器)管理的资源就是对象,对象就是Bean


将对象存放到容器中的好处:将对象存储在 IoC 容器相当于将随用随取,用完放入仓库里面,效率很高.⽽ new 对象的⽅式相当于,每次需要⼯具了,才现做,⽤完就扔掉了也不会保存,下次再⽤的时候还得重新做,效率很低.


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


.

🧁2.DI和DF


🍸2.1什么是DI


DI ,全称Dependency Injection.意思是依赖注入



官方解释:是一种将依赖关系从一个对象传递到另一个对象的技术。在依赖注入中,对象不再负责创建或查找它所依赖的对象,而是将依赖关系委托给 IoC容器。容器在创建对象时,自动将依赖的对象注入到它所依赖的对象中。


实现方式:在Spring中,依赖注入通过注解或 XML 配置文件来实现


简单解释:依赖注入是指在程序运行期间,动态的将依赖对象获取到的过程,也可以说IoC 容器在运⾏期间,动态地将某种依赖关系注⼊到对象之中.

举个例子:A a=new B().创建a 对象需要依赖B ,那么new的这个过程,就直接去容器里面取


那么和之前学的IOC有什么区别和联系?


联系:二者从不同角度描述同一件事情:实现对象之间的解耦,不用再new对象,直接去容器里面取.

区别:

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

不止DI,DF也是一种实现方式


🍸2.2什么是DF


DF Dependency Found 依赖查找


官方解释:是一种从 IoC容器中查找依赖对象的技术。在依赖查找中,对象负责查找它所依赖的对象,而不是将依赖关系委托给容器。容器只负责管理对象的生命周期,而不负责对象之间的依赖关系。


简单解释:给这个对象起一个名字,根据这个名字在容器里查找,找到之后,将该变量赋值给一个新定义的对象,Spring对象的创建就用到了依赖查找,等一下说

实现方式:依赖查找通过 ApplicationContext 接口的 getBean() 方法来实现


🍸2.3DI和DF的区别


依赖注入是将依赖关系委托给容器,由容器来管理对象之间的依赖关系而依赖查找是由对象自己来查找它所依赖的对象,容器只负责管理对象的生命周期


🧁3 Spring创建和使用


🍸3.1创建Spring项目


🍡3.1.1创建一个maven项目

100762fe8fe2453298e06c276eba0bb7.png

🍡3.1.2添加Spring框架支持



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

🍡3.1.3添加启动类



🧁4.创建Bean对象


🍸4.1创建Bean


bean就是一个普通对象


🍸4.2将Bean注册到容器


蓝色的Java放的是Java源代码,resources放的是配置文件,绿色的放的是测试代码

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


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <content:component-scan base-package="com.bit.service"></content:component-scan>
</beans>

3baac7b5d413412dbf8642edf70efe66.png


再将 Student 对象注册到 Spring 中就可以,具体操作是在 中添加如下配置


<bean id="student" class="com.spring.demo.Student"></bean>


id对应的是将对象存储到IOC容器的名字,class对应的是存储到IOC容器的对象的完整路径(包名+类名)


🧁5.获取Bean并使用Bean对象


🍸5.1创建Spring上下文


1.Spring 上下⽂对象可使⽤ ApplicationContext


//得到bean对象
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");

ea8fb2178f044cbaa646f9083dedae81.png


还可以使⽤ BeanFactory 来创建 Spring 的上下⽂


BeanFactory beanFactory=new XmlBeanFactory(new
                ClassPathResource("spring-config.xml"));


8abaf5338936474f882df194b845d41a.png

ApplicationContext 和BeanFactory有什么区别?

相同点:都是容器管理对象,都可以获取bean对象

区别:

1.ApplicationContext属于BeanFactory的子类,ApplicationContext拥有更多功能(国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持)

2.加载bean机制不同:BeanFactory是懒加载

按需加载,


26cc811c997548c2b62a6af90f2e00e8.png


Application是一次性全部加载完



🍸5.2获取指定的Bean对象


🐷1.根据名称获取bean



🐷2.根据类型获取bean对象


 Student studentSrvice=context.getBean(Student.class);

67886560a1394f2087422351b705ad24.png


问题:当同一个类型注入到Spring多个的情况下,那么这个就会报错,编译器不知道获取的对象是哪一个

🐷3.根据名称+类型来获取


 Student studentSrvice=beanFactory.getBean("student1",Student.class);

9ab6a730e88c409197fbd43703d72509.png


🍸5.3使用Bean


//使用bean对象
        studentSrvice.sayHi();
• 1
• 2


🧁6.总结


Spring项目的创建和使用的大致流程


🍬 1.创建Spring项目

🍬2.存Bean

🍭I.创建Bean(创建一个普通对象)

🍭 II.将bean放入Spring(在reources创建spring-config.xml,放相关代码)

🍬3.取bean

🍭3.1.获得Spring 上下文(ApplicationContext/BeanFactory来获得)

🍭3.2.获取bean对象(getbean()方法)

🍭3.3使用bean


今天的讲解就到这里了,我们下期再见咯~

相关文章
|
5月前
|
XML Java 开发者
【Spring】Spring是什么?
【Spring】Spring是什么?
【Spring】Spring是什么?
|
Java 数据库连接 mybatis
|
Java 容器 Spring
|
4月前
|
XML Java 数据库
|
4月前
|
存储 消息中间件 Java
深入理解Spring的TransactionSynchronizationManager
深入理解Spring的TransactionSynchronizationManager
223 0
|
4月前
|
XML Java 数据库连接
SpringjDBCTemplate_spring25
SpringjDBCTemplate_spring25
|
4月前
|
前端开发 Java 数据库连接
一篇告诉你什么是Spring
一篇告诉你什么是Spring
100 0
|
5月前
|
缓存 前端开发 Java
|
5月前
|
Java 程序员 Maven
|
Java Spring
Spring 是什么?
Spring 是什么?
61 0