【Spring全家桶系列之初识篇 | Spring 框架】第三章 控制反转IOC

1. 什么是控制反转 IOC

IoC 是指在程序开发中,实例的创建不再由调用者管理,而是由 Spring 容器创建。Spring 容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了 Spring 容器中,控制权发生了反转,这就是 Spring 的 IoC 思想。

2. IoC的两种容器

2.1 BeanFactory

BeanFactory 是基础类型的 IoC 容器,它由 org.springframework.beans.facytory.BeanFactory 接口定义,并提供了完整的 IoC 服务支持。简单来说,BeanFactory 就是一个管理 Bean 的工厂,它主要负责初始化各种 Bean,并调用它们的生命周期方法。

2.2 ApplicationContext

ApplicationContext 是 BeanFactory 的子接口,也被称为应用上下文。该接口的全路径为org.springframework.context.ApplicationContext,它不仅提供了 BeanFactory 的所有功能,还添加了对 i18n(国际化)、资源访问、事件传播等方面的良好支持。
ApplicationContext 接口有两个常用的实现类:
1)ClassPathXmlApplicationContext
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);
2)FileSystemXmlApplicationContext
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation)

3. Spring Bean的生命周期

在这里插入图片描述

4. 装配Bean

装配Bean主要有以下三种方式:

  • 基于XML装配Bean
  • 自动装配Bean
  • 基于Annotation装配Bean

4.1 DI依赖注入的实现方式

DI依赖注入的实现方式主要有以下方式:

  • 构造方法注入
  • 属性setter注入

4.2 使用p标签、c标签装配Bean

4.2.1 p标签

p:<属性名>=“xxx”引入常量值
p:<属性名>-ref=“xxx”引用其他bean对象

4.2.2 c标签

c:<属性名>=“xxx”引入常量值
c:<属性名>-ref=“xxx”引用其他bean对象

4.3 特殊字符注入

如果配置文件中的注入值包括下面这些特殊字符,需要使用转义
序列表示这些字符,或者使用<![CDATA[ ]]>特殊标签

在这里插入图片描述

4.4 装配集合

在这里插入图片描述

4.5 使用表达式注入-#{表达式}

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

4.6 自动装配

要使用自动装配,就需要配置 元素的 autowire 属性。

在这里插入图片描述

4.7 Annotation常用注解

  • @Component
    可以使用此注解描述 Spring 中的 Bean,但它是一个泛化的概念,仅仅表示一个组件(Bean),并且可以作用在任何层次。使用时只需将该注解标注在相应类上即可。
  • @Repository
    用于将数据访问层(DAO层)的类标识为 Spring 中的 Bean,其功能与 @Component 相同。
  • @Service
    通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。
  • @Controller
    通常作用在控制层(如 Struts2 的 Action),用于将控制层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。
  • @Autowired
    用于对 Bean 的属性变量、属性的 Set 方法及构造函数进行标注,配合对应的注解处理器完成 Bean 的自动配置工作。默认按照 Bean 的类型进行装配。
  • @Qualifier
    与 @Autowired 注解配合使用,会将默认的按 Bean 类型装配修改为按 Bean 的实例名称装配,Bean 的实例名称由 @Qualifier 注解的参数指定。
  • @Resource
    从javax.annotation导入,默认情况下没有,可在http://www.java2s.com/Code/Jar/j/Downloadjavaxannotation30jar.htm下载
    其作用与 Autowired 一样。其区别在于 @Autowired 默认按照 Bean 类型装配,而 @Resource 默认按照 Bean 实例名称进行装配。@Resource 中有两个重要属性:name 和 type。
    Spring 将 name 属性解析为 Bean 实例名称,type 属性解析为 Bean 实例类型。如果指定 name 属性,则按实例名称进行装配;如果指定 type 属性,则按 Bean 类型进行装配。如果都不指定,则先按 Bean 实例名称装配,如果不能匹配,则再按照 Bean 类型进行装配;如果都无法匹配,则抛出 NoSuchBeanDefinitionException 异常。

以上内容的代码案例,可见视频【轻松搞定Spring全家桶—初识篇

推荐视频 — Spring 全家桶

轻松搞定Spring全家桶—初识篇

基础篇:Spring MVC快速开发

核心篇:SpringBoot快速入门

核心篇:深入浅出SpringCloud

进阶篇:SpringData

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码界领航

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

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

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

打赏作者

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

抵扣说明:

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

余额充值