个人博客网:https://wushaopei.github.io/ (你想要这里多有)
1、什么是IOC
IOC 全称指的是 Inverse Of Control 控制反转。
原来我们使用Spring之前对象都是通过代码 new 对象()来自己进行创建。
现在使用了Spring之后。只需要在Spring的配置文件中进行配置,那么spring就会帮我们new出对象来。
2、什么是DI
DI 指的是Dependency Injection 。是依赖注入的意思。
只需要配置就可以把依赖的对象的值注入到引用中。
3、第一个IOC示例程序 -- 通过id获取对象(重点)
实验1:通过IOC容器创建对象,并为属性赋值★
1、创建一个Java工程:
创建相应的类
person类代码
为节省空间,省略getset方法,toString不写
Car 类的代码
2、导入jar包:
- commons-logging-1.1.3.jar
- log4j-1.2.17.jar
- spring-beans-4.3.18.RELEASE.jar
- spring-context-4.3.18.RELEASE.jar
- spring-core-4.3.18.RELEASE.jar
- spring-expression-4.3.18.RELEASE.jar
applicationContext.xml配置文件内容如下:
测试的代码:
打印结果:
问题:
1、FileSystemXmlApplicationContext怎么用?
答:跟使用JavaSE的相对路径一样
2、Bean是在什么时候被创建的?
答:在创建Spring容器的时候,创建Bean对象(默认)
- 如果调用getBean多次,会创建几个?
答:默认创建同一个
常见的错误:
指定的id不存在。找不到bean对象。
4、IOC示例程序 -- 通过类型获取对象(重点)
实验2:根据bean的类型从IOC容器中获取bean的实例★
配置文件代码:
常见错误说明:
按类型查找,找不到就报错
当在applicationContext.xml配置文件中。有多个同Person.class类型实现的时候。
5、IOC示例程序 -- 通过构造方法参数名注入值
实验3:通过构造器为bean的属性赋值
测试代码:
打印结果:
6、IOC示例程序 -- index属性指定参数的位置
实验4:通过index属性指定参数的位置
测试代码:
打印结果:
7、IOC示例程序 -- 根据参数类型注入
实验5:根据参数类型注入
配置信息:
测试代码:
打印结果:
8、IOC之 P名称空间
实验6:通过p名称空间为bean赋值
配置信息:
测试代码:
打印结果:
9、测试null值的使用
实验7:测试使用null值
配置信息:
测试代码:
10、IOC之子对象的赋值测试(重点)
实验8:引用其他bean★
创建个新的工程。测试Spring的开发环境。此不重复。请参阅前面,环境搭建。
Car对象
配置信息:
测试代码:
打印结果:
11、IOC之内部Bean的使用
实验9:引用内部bean
配置信息:
测试代码:
打印结果:
常见错误:内部的Bean不能被外部使用
12、IOC之List属性的赋值
实验10:使用list子元素为List类型的属性赋值
Person对象
配置的信息:
------------------------------------------ 此处省略测试代码!
打印结果
13、IOC之Map属性的赋值
实验11:使用map子元素为Map类型的属性赋值
配置信息:
------------------------------------------ 此处省略测试代码!
打印结果:
14、IOC之Properties属性的赋值
实验12:使用prop子元素为Properties类型的属性赋值
配置信息:
------------------------------------------ 此处省略测试代码!
打印结果:
15、IOC之util 名称空间
util名称空间,可以定义
实验13:通过util名称空间创建集合类型的bean
配置信息:
测试代码:
打印结果:
图解:
16、IOC之级联属性赋值
实验14:给bean的级联属性赋值
配置:
------------------------------------------ 此处省略测试代码!
打印结果:
常见错误:
级联属性一定要先注入对象。再注入对象的属性
图解:
17、IOC之静态工厂方法创建Bean
实验15:配置通过静态工厂方法创建的bean
代码:
配置信息:
------------------------------------------ 此处省略测试代码!
图解:
不重写toString方法的情况下,地址值相同,调用的是同一个对象,从工厂中的方法获取
创建对象流程:
18、IOC之工厂实例方法创建Bean
实验16:配置通过实例工厂方法创建的bean
配置信息:
------------------------------------------ 此处省略测试代码!
打印结果:
流程图解:
19、IOC之FactoryBean接口方式创建对象
实验17:配置FactoryBean接口创建Bean对象
FactoryBean接口方式
配置信息:
------------------------------------------ 此处省略测试代码!
打印结果:
图解流程:
20、IOC之继承Bean配置
实验18:通过继承实现bean配置信息的重用
配置信息:
------------------------------------------ 此处省略测试代码!
打印结果:
图解:先比较parent与id是否相同,再拿class进行比较,
注意:当有两个id相同,而类型不同的bean存在时,会出现ReaderContext.error读取异常
21、IOC之abstract抽象Bean定义(配置)
实验19:通过abstract属性创建一个模板bean
22、IOC之组件创建顺序
实验20:bean之间的依赖 depends-on 属性
配置信息:
测试代码:
打印结果:
23、IOC之Bean的单例和多例(重点)
实验21:测试bean的作用域,分别创建单实例和多实例的bean★
单例——singleton 打印结果:
多例——prototype打印结果:
24、基于xml配置文件的自动注入
先创建Person类和Car类
测试代码:
手动配置引用注入:图解
Default指令效果图解
byType 指令效果图解
匹配的子对象为class中的Car
constructor按构造器参数查找并自动注入 图解
4~6步执行setget和toString方法