Spring的IOC

IoC的概念

这种将创建对象的权利,之前是我们在程序中主动去创建对象,现在由spring容器创建对象,我们需要时从spring容器中被动获取。称为控制反转。
在spring项目中,将对象理解为Bean,也可以叫bean对象
在这里插入图片描述 在这里插入图片描述

IOC的流程图

在这里插入图片描述

  • BeanDefinition
    在这里插入图片描述

  • Spring后置处理器
    1.BeanFactoryPostProcessor
    可以在spring的bean创建之前,修改bean的定义属性
    2.BeanPostProcessor
    BeanPostProcessor中的从而实现AOP面向切面编程

  • BeanFactory单列池
    在这里插入图片描述

Bean的生命周期

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

bean标签的属性说明

属性说明
id容器中的唯一标识
class指定类全名,指定的是实现类,不是接口
name还可以有多个名字、逗号、空格、分号隔开
scopedsingleton:默认值,表示这个是单列对象,整个容器中只会创建一个对像prototype:多例对象,每次获取一个新的对象
init-method创建对象时执行的初始化方法

创建容器的方式

配置文件创建容器: ClassPathXmlApplicationContext(“Spring配置文件名字”)
在这里插入图片描述

Bean的创建

  • 定义接口与实现类
    在这里插入图片描述
  • 创建 Spring 配置文件
    在 src/main/resources/目录现创建一个 xml 文件,文件名可以随意,但 Spring 建议的名称为 applicationContext.xml。
    spring 配置中需要加入约束文件才能正常使用,约束文件是 xsd 扩展名。
    在这里插入图片描述
  • 使用Bean
    在这里插入图片描述

注入

  • set 注入
    在这里插入图片描述创建 java.util.Date 并设置初始的日期时间:
    在这里插入图片描述
    引用类型的注入
    在这里插入图片描述在这里插入图片描述
  • 构造注入
    在这里插入图片描述

引用类型属性自动注入

对于引用类型属性的注入,也可不在配置文件中显示的注入。可以通过为标签
设置 autowire 属性值,为引用类型属性进行隐式自动注入(默认是不自动注入引用类型属 性)。根据自动注入判断标准的不同,可以分为两种:
byName:根据名称自动注入
byType: 根据类型自动注入

  • byName 方式自动注入
    当配置文件中被调用者 bean 的 id 值与代码中调用者 bean 类的属性名相同时,可使用byName 方式,让容器自动将被调用者 bean 注入给调用者 bean。容器是通过调用者的 bean类的属性名与配置文件的被调用者 bean 的 id 进行比较而实现自动注入的。
    在这里插入图片描述
  • byType 方式自动注入
    使用 byType 方式自动注入,要求:配置文件中被调用者 bean 的 class 属性指定的类,要与代码中调用者 bean 类的某引用类型属性类型同源。即要么相同,要么有 is-a 关系(子类,或是实现类)。但这样的同源的被调用 bean 只能有一个。多于一个,容器就不知该匹配
    哪一个了。
    在这里插入图片描述

基于注解的注入

注解
对于 DI 使用注解,将不再需要在 Spring 配置文件中声明 bean 实例。Spring 中使用注解,需要在原有 Spring 运行环境基础上再做一些改变。
需要在 Spring 配置文件中配置组件扫描器,用于在指定的基本包中扫描注解。
在这里插入图片描述定义 Bean 的注解@Component
需要在类上使用注解@Component,该注解的 value 属性用于指定该 bean 的 id 值。
在这里插入图片描述另外,Spring 还提供了 3 个创建对象的注解:
➢ @Repository 用于对 DAO 实现类进行注解
➢ @Service 用于对 Service 实现类进行注解
➢ @Controller 用于对 Controller 实现类进行注解
@Component 不指定 value 属性,bean 的 id 是类名的首字母小写。
在这里插入图片描述注入
简单类型属性注入@Value
在这里插入图片描述byType 自动注入@Autowired
需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的 value 属性用
于指定要匹配的 Bean 的 id 值。
在这里插入图片描述ByName自动注入@Resource
@Resource 注解若不带任何参数,采用默认按名称的方式注入,按名称不能注入 bean, 则会按照类型进行 Bean 的匹配注入。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值