~本特利~ |
学习笔记
更新与修改日志
[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 的主要实现类
- ClassPathXmlApplicationContext:对应类路径下的 XML 格式的配置文件
- FileSystemXmlApplicationContext:对应文件系统中的 XML 格式的配置文件
- 在初始化时就创建单例的 bean,也可以通过配置的方式指定创建的 Bean 是多实例的
ConfigurableApplicationContext
- 是 ApplicationContext 的子接口,包含一些扩展方法
- refresh()和 close()让 ApplicationContext 具有启动、关闭和刷新上下文的能力。
WebApplicationContext
- 专门为 WEB 应用而准备的,它允许从相对于 WEB 根目录的路径中完成初始化工作
Bean
Bean : Spring容器管理的所有的组件(Java的类)。
Spring管理Bean。
Bean的配置
通过类型获取 bean
- 从 IOC 容器中获取 bean 时,除了通过 id 值获取,还可以通过 bean 的类型获取。
HelloWorld helloWorld = cxt.getBean(HelloWorld.class);
- 如果同一个类型的 bean 在 XML 文件中配置了多个,则获取时会抛出异常,所以同一个类型的 bean 在容器中必须是唯一的。
- 或者可以使用另外一个重载的方法,同时指定 bean 的 id 值和类型。
HelloWorld helloWorld = cxt.getBean(“helloWorld”,HelloWorld.class);
给 bean 的属性赋值
依赖注入的方式
- 通过 bean 的 的 setXxx() 方法赋值
- 通过 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框架模拟用户登录
声明:此篇笔记是个人学习时总结教材和互联网资料整理而成,仅供学习参考。
看完点个赞呗,速评一下更有动力哦 |