Spring学习1 - 基于xml文件的IOC和DI

本文介绍了Spring框架的核心概念,包括Spring全家桶、IoC(控制反转)与DI(依赖注入)的基础知识,讲解了Bean的构造方式、作用范围和生命周期,以及依赖注入的不同方式,如setter注入和XML配置。
摘要由CSDN通过智能技术生成


黑马Java课程记录

Spring 是什么

一个技术集,经过多个版本迭代,又称spring全家桶。具体可以在官网查看所有技术集,这里主要学习spring framework(简称spring)、spring boot、spring cloud。

spring framework

需要注意的是,这里还说的是spring (framework),而不是spring boot,而且是基于xml文件,不是注解,我没有成体系的学过spring,当时是直接上手的spring boot,所以不清楚具体的一些区别,边写博客的过程中,我会把看到的一些 区别 写在这。

  1. spring boot是封装优化易上手的spring,它的依赖是类似sprint-boot-……-starter这种形式,而spring的依赖不是starter。

架构

在这里插入图片描述

学习路线

在这里插入图片描述

IOC和DI

基础知识

依赖: A使用了B,A靠着B才能运行,称为A依赖于B。
耦合:形容对象之间的绑定程度。比如A依赖于B,此时B改变,A中的代码使用了B的部分也需要跟着全部改写,这样就说AB之间耦合度高。
解耦: 降低耦合度的过程
IOCInversion Of Control 控制反转。将使用对象的控制权转给外部容器( Spring 提供的 IOC 容器)进行管理,实现方式是 DI 。
DIDependency Injection 依赖注入。在容器里建立对象之间的依赖关系的过程。简单理解就是替换了属性赋值,不用private B b = new B(); 只需要private B b,容器会记录下来,到时候直接去找B。
对象:java把所有东西都看成一个对象,除了方便学习上手保留的八种基本类型,其他都可以是一个对象,对象包括属性和方法。比如一个人,可以用一个 Person 类来表征,人的年龄、姓名、性别……就是定义在 Person 类中的属性。

为什么用

说白了,耦合度过高是一个问题。
前置知识里举例AB,但依赖其实是往往多对多的,A依赖B、C、D……,B又依赖于F、G……。这样导致的问题是,某个被依赖项改变了,比如类名改变,那么所有依赖它的对象全部都要改变,十分费时费力。也不便于灵活的去拓展。
所以,IOC和DI创造出来就是为了解决这样的问题。既然代码里直接嵌入内容会导致耦合度过高,那么就创建一个第三方出来用来专门管理对象之间的关系。

IOC - Bean

Bean:IOC容器创建和管理的对象(任意类型)

bean 的三种构造方式
  1. 构造方法(常用)
  2. 工厂静态方法
  3. 工厂实例方法
    在这里插入图片描述
bean 的作用范围: scope 属性

在这里插入图片描述
默认是单例,简要理解就是复用对象,适合比如原来的new场景
多例,每次都创建新对象,适合比如orm(对象映射管理,如mybatis)的实体类

bean 的生命周期

在这里插入图片描述
注意上图中bean的作用范围如果是多例,销毁不执行。
在这里插入图片描述

从这张图中就可以看出来,DI的实现方式和IOC容器如何操作bean,首先bean(一般是类对象)需要注册到IOC容器中,然后ioc可以通过getBean方法获得bean,创建一个对象,执行构造方法(不写时java默认有无参构造,如果自己定义了有参构造那么也要定义无参构造)就是类似new操作,注册到ioc的bean有属性和对应的set方法,这就是setter注入,初始化就是赋值也就是ioc把new出来的对象用setter注入到依赖中。
在这里插入图片描述

DI

依赖注入的方式
  1. setter注入(常用)
  2. 构造方法注入
  3. 第三方注入(如mybatis肯定也有它的方式)
xml引用类型属性注入

在这里插入图片描述
如图,<property>定义属性,name为属性名,ref调用setter
如果是简单类型(8种基本类型加string),不用ref而是用value,如value = “10”

构造方法注入也类似,也有引用类型和简单类型的注入,只是使用的标签不是<property>而是constructor-arg

自动装配 autowire

在这里插入图片描述

小结

讲了ioc和di,ioc 和 bean,xml配置bean

补充下自定义xml bean和ioc容器读取
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值