Spring IOC

IOC容器

1)IOC底层原理

ioc基本概念(控制反转):把对象的创建和对象之间的调用过程交给Spring进行管理

目的:为了降低耦合度

底层:(1)xml解析、工厂模式、反射

​ 原始(耦合度过于高):在这里插入图片描述

​ 目的:进一步解耦

		工厂模式:

​ IOC过程(xml、反射):在这里插入图片描述

(2)IOC接口(BeanFactory)

1、IOC思想基于IOC容器完成,IOC容器底层就是对象工厂

2、Spring提供IOC容器的两种方式:

(1)BeanFactory:IOC容器的最基本的实现,Spring内部的使用接口,一般不提供开发人员进行使用(加载配置文件的时候并不会创建对象,在获取对象或者使用对象的时候采取创建)1加载2创建

(2)ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用(加载配置文件的时候就对对象进行创建)

3、applicationContext接口实现类
在这里插入图片描述

(3) IOC操作Bean管理

1、什么是Bean管理(概念)

(0)Bean管理指的是两个操作

(1)Spring创建对象

(2)Spring注入属性

2、Bean管理操作的有两种方式
(1)基于xml配置文件方式实现

①基于xml方式创建对象()

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean id="wanger" class="com.luis.dto.Person"></bean>
    
    <bean id="zhangsan" class="com.luis.dto.Person" init-method="init" destroy-method="over"></bean>
    
    <bean id="lisi" class="com.luis.dto.Person" scope="prototype"></bean>

    <bean id="lazy" class="com.luis.dto.Person" lazy-init="true"/></beans>
    
    <bean name="address" class="com.luis.dto.Address"></bean>
</beans>

a、在spring配置文件中,使用bean标签,标签里添加对应的属性,就可以实现对象的创建

b、在bean标签中很多属性,介绍常用的属性

id属性:唯一标识

class属性:类全路径(包类路径)

name属性:与id属性相似(基本不用)

c、创建对象是默认执行的是无参构造方法完成对象的创建

②基于xml方式注入属性

a、DI:依赖注入,就是注入属性

使用set方法注入属性:
在这里插入图片描述
测试代码:
在这里插入图片描述

有参构造注入属性

​ a、创建类,定义属性,创建属性对应的有参构造方法
在这里插入图片描述
b、在spring配置文件配置
在这里插入图片描述
c、p名称空间注入(了解)

(1)使用p名称空间注入,可以简化基于xml配置的方式

第一步需添加p命名空间在配置文件中
在这里插入图片描述
第二步进行属性注入,在bean标签里进行操作
在这里插入图片描述

IOC操作Bean管理(xml注入其他类型的属性)

1、字面量(对象属性初始设置的默认值)

(1)null值(使用null标签)
在这里插入图片描述
(2)属性值包含特殊符号

​ 错误案例
在这里插入图片描述
正确案例(使用![CDATA[**]] )
在这里插入图片描述

注入属性-外部bean

(1)创建两个类service类和dao类

(2)在service调用dao里面的方法

(3)在spring配置文件中进行配置

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

注入属性-内部bean和级联赋值

(1)一对多关系:部门和员工

一个部门里有多个员工,一个员工只属于一个部门

(2)在实体类之间表示一对多的关系

部门类:在这里插入图片描述
员工类:员工表示所属部门,使用对象类型属性进行表示

在这里插入图片描述
(3)在spring配置文件当中进行配置
在这里插入图片描述
级联赋值的方式:

(第一种方法)
在这里插入图片描述
第二种方法)(注意:要先写dept属性的get方法)

在这里插入图片描述

通过XML注入集合属性

1、注入数组类型属性
在这里插入图片描述
2、注入List集合类型属性
在这里插入图片描述
3、注入Map集合类型属性
在这里插入图片描述
4、注入Set集合类型属性
在这里插入图片描述
细节问题:

细节一:在集合属性里设置值为对象如何实现
在这里插入图片描述
在这里插入图片描述
细节二:把集合注入部分提取出来

(1)在spring配置文件引入名称空间util
在这里插入图片描述
(2)提取list集合类型属性注入

(3)提取list集合类型属性注入的使用
在这里插入图片描述

IOC操作Bean管理(FactoryBean)

1、spring有两种类型的bean,一种就是普通的bean,另外一种就是工厂bean(FactoryBean)

2、普通bean:在spring配置文件中定义的类型就是返回类型

3、工厂bean:在配置文件定义bean类型可以与返回的类型不一样

第一步:创建类,让这个类作为工厂bean,实现接口FactoryBean

第二步:实现接口里面的方法,在实现方法中定义返回的bean类型

IOC操作Bean管理(bean的作用域)

1、在Spring里面,设置创建bean实例是单实例还是多实例

2、在Spring里面,bean默认创建的是单实例
在这里插入图片描述
3、如何设置是单实例还是多实例

(1)在spring配置文件bean标签里有属性(scop)用于设置单实例还是多实例

(2)scope属性值

第一个值,singleton,表示单实例对象

第二个值,prototype,表示是多实例对象
在这里插入图片描述
(3)singleton和pototype区别

第一 singleton 单实例,prototype 多实例

第二 设值scope值是singleton的时候,加载spring配置文件时候就会创建实例对象

​ 设置scope值是prototype的时候,不是加载spring配置文件时候创建对象,在调用getBean方法时候创建多实例对象。
在这里插入图片描述

IOC操作Bean管理(bean的生命周期)

1、生命周期

(1)从对象的创建到销毁过程

2、bean的生命周期

(1)通过构造器创造bean实例(无参数构造)

(2)为bean的属性设置值和对其他bean的引用(调用set方法)

(3)调用bean的初始化方法(需要进行配置)

(4)bean可以使用了(对象获取到了)

(5)当容器关闭时候,调用bean的销毁方法(需要进行配置销毁的方法)

3、演示bean的生命周期
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4、bean的后置处理器,bean的生命周期有七步

(1)通过构造器创造bean实例(无参数构造)

(2)为bean的属性设置值和对其他bean的引用(调用set方法)

(3)把bean实例传递bean后置处理器的方法(postbefor)

(4)调用bean的初始化方法(需要进行配置)

(5)把bean实例传递bean后置处理器的方法

(6)bean可以使用了(对象获取到了)

(5)当容器关闭时候,调用bean的销毁方法(需要进行配置销毁的方法)

5、演示添加后置处理器

(1)创建类、实现接口BeanPostProcessor,创建后置处理器
在这里插入图片描述
(2)配置后置处理器

在这里插入图片描述

IOC操作Bean管理(xml自动装配)

1、什么是自动装配?

(1)根据指定装配规则(属性名或者属性类型),spring自动将匹配的属性值进行注入

2、演示自动装配的过程

(1)创建部门类和员工类,员工类有一个部门属性

(2)配置spring配置文件(注入两 个bean,在员工bean使用autowire标签实现自动装配)

byName根据属性名注入,注入bean的id值和属性值要一致,否则无法注入

byType根据属性类型注入(spring配置文件里不能注入多个相同类型的bean)
在这里插入图片描述

IOC操作Bean管理(外部属性文件)

1、直接配置数据库信息

(1)配置连接池(德鲁伊)

(2)引入德鲁伊连接池以来jar包
在这里插入图片描述
在这里插入图片描述
2、引入外部属性文件配置数据库连接池

(1)创建外部属性文件,properties格式文件,写数据库信息
在这里插入图片描述
(2)把外部属性文件引入到spring配置文件中
*引入context名称空间
在这里插入图片描述
*在spring配置文件使用标签引入外部属性文件
在这里插入图片描述

(2)基于注解方式实现

1、什么是注解

(1)注解是代码特殊标记,格式:@注解名称(属性名=属性值,属性名=属性值…)

(2)使用注解,注解作用在类上面,方法上面,属性上面

(3)使用注解的目的:简化xml配置

2、Spring针对Bean管理创建提供的注解

(1)@Conponent 普通组件

(2)@Service

(3)Controller

(4)@Repository @Mapper

*上面的四个注解的功能都是一样的,都可以用来创建bean实例

3、基于注解方式实现对象创建

第一步 引入依赖

在这里插入图片描述
第二步开启组件扫描
在这里插入图片描述
第三步 创建类,在类上面添加创建对象的注解
在这里插入图片描述
在这里插入图片描述
4、开启组件扫描细节配置

在这里插入图片描述
5、基于注解方式实现属性的注入

(1)@AutoWired 根据属性类型进行自动装配

第一步 把service和dao对象创建,在service和dao类创建对象注解

第二步 在service里注入dao对象,在service类添加到类型属性,在属性上面使用

(2)@Qualifier 更具属性的名称进行注入

(3)@Resouce 可以根据类型注入,也可以根据名称进行注入

(4)@Value 注入普通类型属性

6、完全注解

(1)创建配置类,替代xml配置文件
在这里插入图片描述
(2)编写测试类
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值