Spring学习笔记3 Spring对IOC的实现

Spring学习笔记2 Spring的入门程序_biubiubiu0706的博客-CSDN博客

控制反转是一种思想

控制反转是为了降低程序耦合度,提高程序扩展力,达到OCP(开闭原则)原则,达到DIP(依赖倒置原则)原则

控制反转,反转的是什么?

1.将对象的创建权力交出去,交给第三方容器负责

2.对象与对象之间关系的维护权交出去,交给第三方容器负责

控制反转这种思想如何实现---->DI依赖注入

一句话:通过DI依赖注入实现IOC控制反转    控制反转是思想,依赖注入是实现

依赖注入常见方式2种

1.Set注入

2.构造注入

新建模块时候报错,看样子IDEA也要更新了

 Spring学习笔记3 Spring对IOC的实现_第1张图片

引入依赖


    
        org.springframework
        spring-context
        6.0.10
    
    
        junit
        junit
        4.13.2
        test
    

    
    
        org.apache.logging.log4j
        log4j-core
        2.19.0
    
    
        org.apache.logging.log4j
        log4j-slf4j-impl
        2.19.0
    

log4j2.xml


    
        
        
            
        
    
    
        
        
            
            
        
    

Spring配置文件



1.Set注入,基于set方法实现,底层会通过反射机制调用属性对应的set方法然后给属性赋值.这种方式要求属性必须对外提供set方法

Spring学习笔记3 Spring对IOC的实现_第2张图片

Spring学习笔记3 Spring对IOC的实现_第3张图片

Spring学习笔记3 Spring对IOC的实现_第4张图片

Spring学习笔记3 Spring对IOC的实现_第5张图片

使用IDEA生成的set方法

Spring学习笔记3 Spring对IOC的实现_第6张图片Spring学习笔记3 Spring对IOC的实现_第7张图片

Spring学习笔记3 Spring对IOC的实现_第8张图片

搞清楚  Set注入本质

Spring学习笔记3 Spring对IOC的实现_第9张图片

Spring学习笔记3 Spring对IOC的实现_第10张图片

Spring学习笔记3 Spring对IOC的实现_第11张图片

找不到setvipdao的方法

Spring学习笔记3 Spring对IOC的实现_第12张图片

原因是Set注入  name是set方法名,取掉set首字母转小写才行

Spring学习笔记3 Spring对IOC的实现_第13张图片

Spring学习笔记3 Spring对IOC的实现_第14张图片

依赖注入之构造方法注入

set注入,先要有对象,对象执行set方法

而构造注入是创建对象的同时,给属性赋值    注入的时机不一样

业务层新建一个类   新建一个beans2.xml演示构造方法注入

Spring学习笔记3 Spring对IOC的实现_第15张图片

Spring学习笔记3 Spring对IOC的实现_第16张图片

测试

Spring学习笔记3 Spring对IOC的实现_第17张图片

上面用下标指定参数,也可以用name   参数名字指定  还可以不指定下标,也不指定参数名,让Spring自己做类型匹配

Spring学习笔记3 Spring对IOC的实现_第18张图片

Spring学习笔记3 Spring对IOC的实现_第19张图片

构造注入和Set注入,一般set注入相对较多

set注入专题:(必须提供set方法)

1.注入外部Bean和注入内部bean

新建个Spring配置文件  取名set-di.xml专配用于set注入

新建个OrderDao

新建个OrderService

Spring学习笔记3 Spring对IOC的实现_第20张图片

Spring学习笔记3 Spring对IOC的实现_第21张图片

此种方式就是外部bean ref引入

Spring学习笔记3 Spring对IOC的实现_第22张图片

Spring学习笔记3 Spring对IOC的实现_第23张图片

日志太多可以

调整下

Spring学习笔记3 Spring对IOC的实现_第24张图片

Spring学习笔记3 Spring对IOC的实现_第25张图片

演示内部bean

在property标签中使用嵌套bean就叫内部bean

Spring学习笔记3 Spring对IOC的实现_第26张图片

测试

Spring学习笔记3 Spring对IOC的实现_第27张图片

2.set注入,注入简单类型

原先通过set方法注入的是OrderDao 引入类型

下面看下  简单类型的注入

新建一个类  提供set方法 和toString方法

Spring学习笔记3 Spring对IOC的实现_第28张图片

在Spring配置文件 set-di里配置

Spring学习笔记3 Spring对IOC的实现_第29张图片

测试

Spring学习笔记3 Spring对IOC的实现_第30张图片

那么所谓的简单类型包括什么呢,哪些是简单类型

Spring中有个工具类    双击SHIFT  或者 CTRL+N

搜索  BeansUtils

Spring学习笔记3 Spring对IOC的实现_第31张图片

按ALT+7  可以看到这个类里所有方法

查看isSimpleValueType这个方法 这个方法就是Spring判定是否是简单类型的方法

Spring学习笔记3 Spring对IOC的实现_第32张图片

测试几个简单类型  定义个枚举

Spring学习笔记3 Spring对IOC的实现_第33张图片

测试new Date()的输出格式    Sat Sep 23 00:41:46 CST 2023Spring学习笔记3 Spring对IOC的实现_第34张图片

都提供相应的set方法 提供toString方便输出看值

Spring学习笔记3 Spring对IOC的实现_第35张图片

在set-di.xml里配置

Spring学习笔记3 Spring对IOC的实现_第36张图片

测试

Spring学习笔记3 Spring对IOC的实现_第37张图片

Spring学习笔记3 Spring对IOC的实现_第38张图片

set注入简单类型的经典应用

举例:数据源,DataSource

Spring学习笔记3 Spring对IOC的实现_第39张图片

Spring学习笔记3 Spring对IOC的实现_第40张图片

测试

Spring学习笔记3 Spring对IOC的实现_第41张图片

set注入之级联属性赋值

创建两个类测试

Spring学习笔记3 Spring对IOC的实现_第42张图片

Spring学习笔记3 Spring对IOC的实现_第43张图片

配置

Spring学习笔记3 Spring对IOC的实现_第44张图片

测试

Spring学习笔记3 Spring对IOC的实现_第45张图片

上面并不是所谓的级联属性赋值

Spring学习笔记3 Spring对IOC的实现_第46张图片Spring学习笔记3 Spring对IOC的实现_第47张图片Spring学习笔记3 Spring对IOC的实现_第48张图片

set方法注入数组(数组里面可能是简单类型,也可能不是简单类型)

先演示数组里面是简单类型

Spring学习笔记3 Spring对IOC的实现_第49张图片

Spring学习笔记3 Spring对IOC的实现_第50张图片

Spring学习笔记3 Spring对IOC的实现_第51张图片

演示数组里面不是简单类型

新建类

Spring学习笔记3 Spring对IOC的实现_第52张图片

Person添加属性并重写set方法               toString只为输出时候看的方便

Spring学习笔记3 Spring对IOC的实现_第53张图片

Spring学习笔记3 Spring对IOC的实现_第54张图片

测试

Spring学习笔记3 Spring对IOC的实现_第55张图片

set注入List和Set集合

set注入List集合

新建类

Spring学习笔记3 Spring对IOC的实现_第56张图片

Spring学习笔记3 Spring对IOC的实现_第57张图片

测试

Spring学习笔记3 Spring对IOC的实现_第58张图片

Set注入Map集合

Spring学习笔记3 Spring对IOC的实现_第59张图片

Spring学习笔记3 Spring对IOC的实现_第60张图片Spring学习笔记3 Spring对IOC的实现_第61张图片

注意:如果Map的key  value不是简单类型的配置

Spring学习笔记3 Spring对IOC的实现_第62张图片

Map还有一个特殊的类Properties   继承Hashtable

Spring学习笔记3 Spring对IOC的实现_第63张图片

Spring学习笔记3 Spring对IOC的实现_第64张图片

Spring学习笔记3 Spring对IOC的实现_第65张图片

Spring学习笔记3 Spring对IOC的实现_第66张图片

set注入  注入null和空字符串

Spring学习笔记3 Spring对IOC的实现_第67张图片

Spring学习笔记3 Spring对IOC的实现_第68张图片

Spring学习笔记3 Spring对IOC的实现_第69张图片

set注入  注入特殊字符

xml中有5个特殊符号,分别是:   大于号 >    小于号  <   单引号  '     双引号  "     与   &

Spring学习笔记3 Spring对IOC的实现_第70张图片

  Spring学习笔记3 Spring对IOC的实现_第71张图片

实体符号代替特殊符号 对照表

Spring学习笔记3 Spring对IOC的实现_第72张图片

Spring学习笔记3 Spring对IOC的实现_第73张图片

set注入   p命名空间注入也是基于set方法

注意:P空间注入底层还是set注入,只不过P命名空间注入可以让Spring配置变得更简单

新建类

Spring学习笔记3 Spring对IOC的实现_第74张图片

新建配置文件spring-p.xml

Spring学习笔记3 Spring对IOC的实现_第75张图片

Spring学习笔记3 Spring对IOC的实现_第76张图片

Spring学习笔记3 Spring对IOC的实现_第77张图片

Spring学习笔记3 Spring对IOC的实现_第78张图片

Spring学习笔记3 Spring对IOC的实现_第79张图片

C命名空间注入  是为了简化构造注入

新建类

Spring学习笔记3 Spring对IOC的实现_第80张图片

新建配置文件    可以用简单注入   也可以用ref

Spring学习笔记3 Spring对IOC的实现_第81张图片

Spring学习笔记3 Spring对IOC的实现_第82张图片

Spring学习笔记3 Spring对IOC的实现_第83张图片

util命名空间让配置复用

使用util命名空间可以让配置复用

使用util命名空间的前提是:在Spring配置文件头部添加配置信息.

Spring学习笔记3 Spring对IOC的实现_第84张图片

所谓的配置复用     新建两个类

Spring学习笔记3 Spring对IOC的实现_第85张图片

Spring学习笔记3 Spring对IOC的实现_第86张图片

原先的配置方式  但是重复

Spring学习笔记3 Spring对IOC的实现_第87张图片

用util命名空间让配置复用

Spring学习笔记3 Spring对IOC的实现_第88张图片

简写后

Spring学习笔记3 Spring对IOC的实现_第89张图片

测试

Spring学习笔记3 Spring对IOC的实现_第90张图片

基于XML的自动装配(无论是byName还是byType都是基于set方法的)

Spring还可以完成自动化注入,自动化注入又称为自动装配,它可以根据名字进行自动装配,也可以根据类型进行自动装配

根据名称自动装配

以OrderDao和OrderService演示

Spring学习笔记3 Spring对IOC的实现_第91张图片

Spring学习笔记3 Spring对IOC的实现_第92张图片

新建个配置文件 spring-autowire.xml

Spring学习笔记3 Spring对IOC的实现_第93张图片

原先的写法

Spring学习笔记3 Spring对IOC的实现_第94张图片

测试

Spring学习笔记3 Spring对IOC的实现_第95张图片

自动装配  byName测试  如果是Idea工具自动生成set方法,那么就是和变量名相同(关键严格记住set方法名去掉set首字母小写)

被注入的对象,被注入的对象

Spring学习笔记3 Spring对IOC的实现_第96张图片

Spring学习笔记3 Spring对IOC的实现_第97张图片

基于XML自动装配   byType

下面用Customer演示  添加无参构造  和set方法

Spring学习笔记3 Spring对IOC的实现_第98张图片

Spring学习笔记3 Spring对IOC的实现_第99张图片Spring学习笔记3 Spring对IOC的实现_第100张图片

注意 byType的话   如果类型有两个  会报错

比如

Spring学习笔记3 Spring对IOC的实现_第101张图片

引入外部属性配置文件

比如现在有个类,类里属性来自于属性配置文件

Spring学习笔记3 Spring对IOC的实现_第102张图片

创建jdbc.properties

Spring学习笔记3 Spring对IOC的实现_第103张图片

新建个配置文件 spring-properties

Spring学习笔记3 Spring对IOC的实现_第104张图片

引入外部文件写法

Spring学习笔记3 Spring对IOC的实现_第105张图片

Spring学习笔记3 Spring对IOC的实现_第106张图片

Spring学习笔记3 Spring对IOC的实现_第107张图片

Spring学习笔记3 Spring对IOC的实现_第108张图片

Spring学习笔记3 Spring对IOC的实现_第109张图片

Spring学习笔记3 Spring对IOC的实现_第110张图片

为什么出现这种情况原因: ${user} Spring默认去读到的是系统配置的

因此,建议加前缀

Spring学习笔记3 Spring对IOC的实现_第111张图片

Spring学习笔记3 Spring对IOC的实现_第112张图片

Spring学习笔记3 Spring对IOC的实现_第113张图片

你可能感兴趣的:(spring,学习,笔记)