spring学习3-IOC容器和Bean的设置

~本特利~


更新与修改日志
[21.03.14] 整理


第三节


依赖注入

DI的全称是Dependency Injection,中文称之为依赖注入。
它与控制反转(IoC)的含义相同,只不过这两个称呼是从两个角度描述的同一个概念。
在这里插入图片描述

在这里插入图片描述

IOC反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动形式。

DI是IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器的资源注入。相对于 IOC 而言,这种表述更直接。

依赖注入的实现方式

在这里插入图片描述在这里插入图片描述

操作流程:

在这里插入图片描述

setter注入

在这里插入图片描述
在这里插入图片描述


IOC 容器在 Spring 中的实现

  • 1)在通过 IOC 容器读取 Bean 的实例之前,需要先将 IOC 容器本身实例化。
  • 2)Spring 提供了 IOC 容器的两种实现方式:
    • BeanFactory:IOC 容器的基本实现,是 Spring 内部的基础设施,是面向Spring 本身的,不是提供给开发人员使用的。
    • ApplicationContext:BeanFactory 的子接口,提供了更多高级特性。面向Spring 的使用者,几乎所有场合都使用 ApplicationContext 而不是底层的BeanFactory

ApplicationContext 的主要实现类

  1. ClassPathXmlApplicationContext:对应类路径下的 XML 格式的配置文件
  2. FileSystemXmlApplicationContext:对应文件系统中的 XML 格式的配置文件
  3. 在初始化时就创建单例的 bean,也可以通过配置的方式指定创建的 Bean 是多实例的

ConfigurableApplicationContext

  1. 是 ApplicationContext 的子接口,包含一些扩展方法
  2. refresh()和 close()让 ApplicationContext 具有启动、关闭和刷新上下文的能力。

WebApplicationContext

  1. 专门为 WEB 应用而准备的,它允许从相对于 WEB 根目录的路径中完成初始化工作

Bean

Bean : Spring容器管理的所有的组件(Java的类)。
Spring管理Bean。

Bean的配置

在这里插入图片描述
在这里插入图片描述

通过类型获取 bean

  1. 从 IOC 容器中获取 bean 时,除了通过 id 值获取,还可以通过 bean 的类型获取。HelloWorld helloWorld = cxt.getBean(HelloWorld.class);
    • 如果同一个类型的 bean 在 XML 文件中配置了多个,则获取时会抛出异常,所以同一个类型的 bean 在容器中必须是唯一的。
  1. 或者可以使用另外一个重载的方法,同时指定 bean 的 id 值和类型。
    HelloWorld helloWorld = cxt.getBean(“helloWorld”,HelloWorld.class);

给 bean 的属性赋值

依赖注入的方式

  1. 通过 bean 的 的 setXxx() 方法赋值
    在这里插入图片描述
  1. 通过 bean 的构造器赋值
  • Spring 自动匹配合适的构造器
<bean id="book" class="com.atguigu.spring.bean.Book" >
<constructor-arg value= "10010"/>
<constructor-arg value= "Book01"/>
<constructor-arg value= "Author01"/>
<constructor-arg value= "20.2"/>
</bean >
  • 通过索引值指定参数位置
<bean id="book" class="com.atguigu.spring.bean.Book" >
<constructor-arg value= "10010" index ="0"/>
<constructor-arg value= "Book01" index ="1"/>
<constructor-arg value= "Author01" index ="2"/>
<constructor-arg value= "20.2" index ="3"/>
</bean >
  • 通过类型区分重载的构造器
<bean id="book" class="com.atguigu.spring.bean.Book" >
<constructor-arg value= "10010" index ="0" type="java.lang.Integer" />
<constructor-arg value= "Book01" index ="1" type="java.lang.String" />
<constructor-arg value= "Author01" index ="2" type="java.lang.String" />
<constructor-arg value= "20.2" index ="3" type="java.lang.Double" />
</bean >

Bean的实例化

  • 有3种方式
    在这里插入图片描述

构造器实例化

在这里插入图片描述


静态工厂方式实例化

在这里插入图片描述


实例工厂方式实例化

在这里插入图片描述

Bean实例化的具体操作

在这里插入图片描述在这里插入图片描述

p名称空间

为了简化 XML 文件的配置,越来越多的 XML 文件采用属性而非子元素配置信息。Spring从2.5版本开始引入了一个新的p命名空间,可以通过元素属性的方式配置Bean的属性。使用 p 命名空间后,基于 XML 的配置方式将进一步简化。

<bean
id="studentSuper"
class="com.atguigu.helloworld.bean.Student"
p:studentId="2002" p:stuName="Jerry2016" p:age="18" />

实操:用spring框架模拟用户登录

在这里插入图片描述


声明:此篇笔记是个人学习时总结教材和互联网资料整理而成,仅供学习参考。

看完点个赞呗,速评一下更有动力哦
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~本特利~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值