Spring学习(一)IoC容器&解耦&依赖注入(示例代码后续更新)

Spring (一)

IoC

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。

常规代码和控制反转代码的区别

  • 常规代码
调用
调用
调用
用户
业务1
业务2
业务3
  • 控制反转
将控制权交给Ioc容器
调用
调用
调用
用户
IoC容器
业务1
业务2
业务3

目的

解耦:降低程序各个部分之间的依赖度,能够确保如果哪一个部分如果出现错误,依然能够成功编译,但是运行无法通过。

耦合度只能降低,并不能完全消除。

Spring的核心容器ApplicationContext的常用实现类

  • ClassPathXmlApplicationContext

    可以加载***类路径下***的配置文件,要求配置文件必须在类路径下(更常用)

  • FileSystemXmlApplicationContext:

    可以加载磁盘任意路径下*的配置文件,*但是必须有访问权限

  • AnnotationConfigApplication

    读取注解创建容器

ApplicationContext和BeanFactory两个接口的区别

  • ApplicationContext更适合单例对象使用

    在构建核心容器时,创建对象采取的策略是采用立即加载的方式。也就是说只要一读取完配置文件马上就创建配置文件中的对象

  • BeanFactory更适合多例对象使用

    在构建核心容器时,创建对象采取的策略是采用延迟加载的方式。什么时候需要根据id获取对象,什么时候创建对象

Spring创建Bean的三种方式

  • 第一种方式:使用默认的构造函数

    在Spring的配置文件中使用bean标签,写好id和class属性之后,且没有其他属性和标签时,采用默认构造函数创建bean对象,如果类中没有默认构造函数,则对象无法创建。

  • 第二种方式:使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器)

    <bean id="" factory-bean="" factory-method=""/>
    
  • 第三种方法:使用工厂类中的静态方法创建对象(使用某个类中的静态方法创建按对象,并存入spring容器)

    <bean id="" class="" factory-method=""/>
    

Bean对象的作用范围

  • Spring创建的Bean对象,默认为单例

    scope属性取值:

    ​ singleton:单例(默认)

    ​ prototype:多例的

    ​ request:作用于web应用的请求范围

    ​ session:作用于web应用的会话范围

    ​ global-session:作用于集群环境的会话范围(全局会话范围),不是集群环境,和session无异

Bean生命周期

  • 单例对象
    • 当容器创建时,对象被创建
    • 容器还在,对象就不会消失
    • 容器销毁,对象被销毁
  • 多例对象
    • 使用时spring创建
    • 对象被使用时不会被销毁
    • 当对象长时间不使用,且没有其他对象引用时,由java垃圾回收器回收

依赖注入

依赖关系的管理:

以后都交给spring来维护,在当前类需要用到其他类的对象,由spring来为我们提供,我们只需要在配置文件中说明依赖关系的维护。

  • 能注入的数据有三类:
    • 基本类型和String
    • 其他bean类型(配置文件中或注解配置或注解配置过的bean)
    • 复杂类型/集合类型
  • 注入方式:
    • 使用构造函数
    • 使用set方法
    • 使用注解提供

构造函数注入

使用标签:constructor-arg

标签出现的位置:bean标签的内部

标签中的属性

  • type:用于指定要注入的数据的数据类型,该数据类型也是构造函数中某个或某些参数的类型
  • index:指定要注入的数据给构造函数中指定索引位置的参数赋值。索引的位置是从0开始的
  • name:用于指定给构造函数中指定名称的参数赋值
  • value:用于给基本类型和string类型数据赋值
  • ref:用于指定其他的bean类型数据。指的是在spring的IoC容器中出现过的bean对象

作用:在获取bean对象时,使用bean对象的构造方法

Set方法注入(更常用)

涉及的标签:property

出现位置:bean内部

属性:

  • name:用于指定注入时的调用的set方法名称
  • value:用于给基本类型和string类型数据赋值
  • ref:用于指定其他的bean类型数据。指的是在spring的IoC容器中出现过的bean对象

创建对象时没有明确的限制,可以直接使用默认构造函数

复杂类型注入(集合,properties等)

在标签内部加入对应复杂类型的标签,值用填充

用于给List结构集合注入的标签

​ list array set

用于给Map结构集合注入的标签

​ map props

结构相同, 标签可以互相替换

map集合

props使用***

你可能感兴趣的:(Spring学习(一)IoC容器&解耦&依赖注入(示例代码后续更新))