2021-10-06 Spring笔记-IOC

概念

  1. 概念:IoC即控制反转,将创建对象和对象之间的调用过程由原本的new关键字转交给Spring框架管理,程序自身不必去创建对象
  2. 目的:降低耦合度,在Web开发中的主要用途就是将Bean类的管理交由Spring而非程序员手动管理
  3. 特征:创建对象使用工厂模式创建,而非程序员直接new
  4. 原理:xml解析、工厂模式、反射
  5. 工厂模式只能将耦合降低,并不能将耦合度降成最低,所以加上xml解析和反射,将耦合度进一步降低

IoC过程

  1. 创建xml文件,配置bean对象
  2. 第二步:创建工厂类,在工厂方法中进行xml解析,并通过反射得到类的字节码,Class.forName()
  3. 第三步:对象创建,class.newInstance()

接口(IoC)

  1. IoC思想基于IOC容器完成,IOC容器底层就是对象工程
  2. Spring提供了IOC容器的两种实现方式(两个接口):
    • BeanFactory(基本实现,是spring内部的使用,一般开发人员不用)
      加载配置文件时不会创建对象,在获取对象是才去创建对象
    • ApplicationContext(是BeanFactory的子接口,提供更多功能,一般由开发人员使用)
      在加载配置文件时就完成对象创建
      ApplicationContext有两个实现类:FileSystemXmlApplicationContext和ClassPathXmlApplicationContext

Bean管理操作

  1. 操作步骤

    1. Spring创建对象操作:工厂方法创建对象
    2. Spring属性注入操作:创建对象的过程中为各个属性赋值
  2. Bean管理操作的两种方法

    • 基于xml

      1. 创建对象:在spring文件中使用bean>标签,添加对应属性,即可实现对象创建
        • id属性:给对象起一个标识名
        • class属性:类的全路径
      2. 创建对象,默认使用的是无参构造方法,如果没有无参构造,会报错
      3. 依赖注入(DI)
        • 概念:依赖注入,就是注入属性
        • 第一种方式:使用set方法
          创建属性
          创建对应set方法
          注入属性,在bean>标签中使用property>标签,name为属性名,value为想要注入的值
        • 第二种方法:使用有参构造注入
          创建属性
          创建有参构造方法
          在spring的配置文件中进行配置,在bean>标签中使用多个consturctor-org>标签,name为属性名,value为属性值,也可以使用index来作为第几个参数值替代name
        • p名称空间注入,底层还是依赖set方法注入
        • 注入null值和特殊字符
          • 字面量:固定值,如字符串等
            • null:property>中不用写value值,而是在property>两个标签中添加一个null/>标签
            • 特殊字符:如>,""等,两种方式
              1. 转义: “&lt”;"&gt"
              2. 内容写道CDATA中:value>标签中添加一个标签![CDATA[value]]>,字符写在value中,就可以包含特殊符号
      4. 外部bean赋值
        在service层中调用dao中的方法,就是调用外部bean
        • 创建service和dao
        • 在service中调用dao的方法
        • 在spring配置文件中进行配置,在service中注入dao
          • 创建两个bean,一个为service,一个为dao的实现,在service中使用property标签,用ref属性,将dao注入service
      5. 内部bean赋值
        • 内部bean:实体类里面有实体类
          • 先设置普通属性
          • 然后设置对象类型属性 在property中创建bean对象,成为内部bean(称为级联赋值)
      6. 级联赋值的其他方法
        • 内部类的bean写在和外部bean同一层,然后在外部bean中使用ref标签来引用内部类,类似于外部bean赋值
      7. 注入集合类型
        • 注入数组,list值
          添加bean标签,然后在property标签中使用list或者array标签等,在array标签中使用多个value标签进行注入
        • 注入map
          map标签使用的是entry
        • 注入set
          set标签用的是value
      8. 集合中注入对象属性值
        • 法一:先创建多个实体对象bean,然后在list标签中使用ref标签逐个引入实体对象id
        • 法尔:使用util标签,在其中使用value标签来赋多值,然后在bean标签中使用ref引入id
      9. 工厂Bean:普通Bean返回的对象就是定义的类型,工厂bean则返回的类型不一定与定义类型相同
        • 将Bean类实现FactoryBean接口,设置泛型<>为返回类型,在getObject方法里创建对象
      10. Bean的作用域
        • 在Spring中,设置bean实例是为单实例还是多实例,在默认情况下创建的为单例
        • 设置多实例的方法:在备案标签中使用scope属性来更改,singleton标识单例,prototype为多实例,singleton为加载时创建,prototype为调用getBean方法时创建
      11. Bean的生命周期
        从对象创建到对象销毁的过程
        • 通过构造器创建实例(调用构造方法)
        • 为Bean注入值(调用set方法)
        • 调用Bean里面的初始化方法(执行初始化方法,在bean标签中使用init-Method属性绑定方法)
        • Bean已经可以使用
        • 容器关闭时,调用bean的销毁方法销毁Bean(执行销毁方法,在bean标签中使用destroy方法进行绑定)
      12. 自动装配
        以上注入值的方法都是手动装配,而自动装配可以指定一个规则,Spring自动匹配属性值进行注入
        • 在bean标签中使用autowire属性,值为byname和bytype
    • 基于注解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值