Spring5-IOC

概念

把对象创建和对象之间的调用过程,交给spring来管理。主要为了降低类之间的耦合度。

底层原理

  1. xml解析
  2. 工厂模式(用于解耦)
  3. 反射

IOC容器的实现方式

  1. BeanFactory(Spring内部接口)
    • 懒汉模式:加载配置时不会创建对象,只有在使用的时候才会创建。
  2. ApplicationContext(实现了BeanFactory接口,并增加了更多的功能)
    • 加载配置文件时就会创建对象。(因此,可以在服务器启动时完成类的创建)

Bean管理

  1. 内容

    • Spring创建对象
    • Spring注入属性
      (1) setter 注入
      • 为每一个属性使用 property 来注入
      • p名称空间注入
        (2) 有参构造器注入

    当赋值的属性出现特殊符号时,使用转义或者 <![CDATA[content]]>来实现

  2. 实现方式

    • 基于xml文件配置:默认无参构造,使用setter注入
    • 基于注解
  3. 类型

    • 普通bean:定义啥就返回啥
    • 工厂bean:继承FactoryBean接口,构造工厂模式,返回不同类型
  4. 作用域

    • 定义:表示bean实例是单实例还是多实例;
    • Spring默认创建的是单实例对象(单例模式)。
    • singleton、prototype(懒汉模式)
  5. 生命周期

    • 定义:表示bean对象从创建到销毁的过程。
    • 过程:
      (1)通过构造器创建bean实例
      (2)为bean属性设值与对其它bean实例的引用(setter注入)
      (3) 将bean实例传递到 后置处理器(Before方法)
      (4)调用bean的初始化方法(需要 init-method 配置)
      (5) 将bean实例传递到 后置处理器(After方法)
      (6)使用bean
      (7)容器关闭的时候,调用bean的销毁方法(需要 destroy-method 配置,并进行手动关闭)
  6. 自动装配

    • 根据指定的装配规则(属性名称属性类型),spring将自动将匹配的属性值进行注入。
    • 使用 autowire标签。

基于xml配置的补充说明

注入的属性含有特殊符号时:

  1. 使用转义符号 < > 分别表示 < >
  2. 将内容写入CDATA

注入外部bean

  1. 类中定义外部类属性,并在构造器中传参;
  2. xml配置文件中使用外部类对象的bean标签id值作为ref的参数

注入内部bean

  1. 嵌套书写或者类似外部bean注入,使用ref进行引用。

注入对象

  1. 对于对象集合,使用内置的各种标签+内部bean注入;
  2. 导入util,并利用其构造公共集合类,方便使用。

设置单实例与多实例

spring配置文件的bean标签中有一个属性域 scope, 默认值为 singeton,表示单实例(饿汉式创建), 可以修改为 prototype,表示多实例(懒汉式创建)。

后置处理器

使用一个类实现 BeanPostProcessor 接口中的两个方法,并在xml中创建bean对象,作用域为该xml文件中的所有bean对象
在这里插入图片描述

引入外部属性文件

  1. 引入依赖
  2. 构建properties外部属性文件,内部是key-value结构的值
  3. 在xml文件中引入context名称空间,用于引入properties文件
  4. 在value标签中使用表达式(格式为 ${name})利用key来获取value

基于注解方式的补充说明

格式

@注解名称(属性名称=属性值,属性名称=属性值,…)

作用域

  1. 方法
  2. 属性

创建对象的注解

  1. @Component
  2. @Service
  3. @Controller
  4. @Repository(持久层一般换为@mapper)

这四种注解的功能时一样的,命名不一致只是为了方便查看。

创建流程

  1. 引入 aop依赖
  2. 开启组件扫描
  3. 进行类的创建,并在类上添加创建对象注解
扫描过滤器

更改use-default-filters参数,并设置内部标签即可。
在这里插入图片描述

注入属性的注解

  1. @Autowired: 根据属性类型自动装配
    • 创建对应对象,并创建对象的注解
    • 在被注入对象上添加注入属性的注解
  2. @Qualifier:根据属性名称注入
    • 需要配合@Autowired一起使用(用于多同类型实现类下的指定)
  3. @Resource:可以根据类型注入,也能使用名称注入
    • 本身存在与javax中,Spring官方不建议使用
  4. @Value:注入普通类型数据

配置类注解

  1. @Configuration
  2. @ComponentScan
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值