Spring IOC

IOC容器

1)IOC底层原理

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

目的:为了降低耦合度

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

​ 原始(耦合度过于高):Spring IOC_第1张图片

​ 目的:进一步解耦

		工厂模式:

​ IOC过程(xml、反射):Spring IOC_第2张图片

(2)IOC接口(BeanFactory)

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

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

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

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

3、applicationContext接口实现类
Spring IOC_第3张图片

(3) IOC操作Bean管理

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

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

(1)Spring创建对象

(2)Spring注入属性

2、Bean管理操作的有两种方式

(1)基于xml配置文件方式实现

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


<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方法注入属性:
Spring IOC_第4张图片
测试代码:
Spring IOC_第5张图片

有参构造注入属性

​ a、创建类,定义属性,创建属性对应的有参构造方法
Spring IOC_第6张图片
b、在spring配置文件配置
Spring IOC_第7张图片
c、p名称空间注入(了解)

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

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

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

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

(1)null值(使用null标签)
Spring IOC_第8张图片
(2)属性值包含特殊符号

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

注入属性-外部bean

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

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

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

Spring IOC_第10张图片
Spring IOC_第11张图片

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

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

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

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

部门类:Spring IOC_第12张图片
员工类:员工表示所属部门,使用对象类型属性进行表示

Spring IOC_第13张图片
(3)在spring配置文件当中进行配置
Spring IOC_第14张图片
级联赋值的方式:

(第一种方法)
Spring IOC_第15张图片
第二种方法)(注意:要先写dept属性的get方法)

Spring IOC_第16张图片

通过XML注入集合属性

1、注入数组类型属性
Spring IOC_第17张图片
2、注入List集合类型属性
Spring IOC_第18张图片
3、注入Map集合类型属性
Spring IOC_第19张图片
4、注入Set集合类型属性
Spring IOC_第20张图片
细节问题:

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

(1)在spring配置文件引入名称空间util
Spring IOC_第22张图片
(2)提取list集合类型属性注入

(3)提取list集合类型属性注入的使用
Spring IOC_第23张图片

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默认创建的是单实例
Spring IOC_第24张图片
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的生命周期
Spring IOC_第25张图片
Spring IOC_第26张图片
Spring IOC_第27张图片
Spring IOC_第28张图片
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,创建后置处理器
Spring IOC_第29张图片
(2)配置后置处理器

Spring IOC_第30张图片

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

1、什么是自动装配?

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

2、演示自动装配的过程

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

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

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

byType根据属性类型注入(spring配置文件里不能注入多个相同类型的bean)
Spring IOC_第31张图片

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

1、直接配置数据库信息

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

(2)引入德鲁伊连接池以来jar包
Spring IOC_第32张图片
Spring IOC_第33张图片
2、引入外部属性文件配置数据库连接池

(1)创建外部属性文件,properties格式文件,写数据库信息
Spring IOC_第34张图片
(2)把外部属性文件引入到spring配置文件中
*引入context名称空间
Spring IOC_第35张图片
*在spring配置文件使用标签引入外部属性文件
Spring IOC_第36张图片

(2)基于注解方式实现

1、什么是注解

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

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

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

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

(1)@Conponent 普通组件

(2)@Service

(3)Controller

(4)@Repository @Mapper

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

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

第一步 引入依赖

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

Spring IOC_第40张图片
5、基于注解方式实现属性的注入

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

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

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

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

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

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

6、完全注解

(1)创建配置类,替代xml配置文件
Spring IOC_第41张图片
(2)编写测试类
Spring IOC_第42张图片

你可能感兴趣的:(Spring,spring,5,java,ioc)