一、由传统new到IOC思想
二、控制反转IOC
控制反转是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
作用: 削减计算机的耦合
案例
id:获取时的唯一标识
class:反射创建对象时所需的全限定类名
三、ApplicationContext(核心容器)三个实现类
(1) ClassPathXmlApplicationContext:可以加载类路径下的配置文件,要求配置文件必须在类路径下。如果不在,加载不了
(2) FileSystemXmlApplicationContext:可以加载磁盘任意路径下的配置文件(必须有访问全限)
(3) AnnotationConfigApplicationContext:用于读取注解创建容器
四、Beanfactory和ApplicationContext
(1) ApplicationContext:在构建核心容器时,创建对象采取的策略是采用立即加载的方式,即只要一读取完配置文件马上就创建配置文件中配置的对象。单例对象适用。
(2) Beanfactory:在构建核心容器时,创建对象采取的策略是采用延迟加载的方式,即什么时候根据id获取对象了,什么时候才真正地创建对象。多例对象适用。
五、创建Bean对象的方式
方式一:使用默认构造函数构建
在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其它属性和标签时,
采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建。
方式二:使用普通工厂中的方法创建对象
使用某个类中的方法创建对象,并存入spring容器
方式三:使用工厂中的静态方法创建对象
使用某个类中的静态方法创建对象,并存入spring容器
六、bean的作用范围
bean标签的scope属性:用于指定bean的作用范围
取值
singleton:单例的(默认值)
prototype:多例的
request:作用于web应用的请求范围
session:作用于web应用的会话范围
global-session:作用于集群环境的会话范围(全局绘画范围),当不是集群环境时,就是session
prototype
global-session理解
想象一个场景,当用户通过域名访问一个网站时,会通过负载均衡将请求调度到空闲的服务器上,这时服务器会响应回登录界面,当用户填写完信息时,其中验证码也会在当前服务器(session)保存一份。当用户点击登录按钮时,发送第二次请求,但是接受第一次请求的服务器变成了满负荷,因此此次请求会发送到其它空闲的服务器上。但是这次的服务器(session)上并没有存储验证码,按照这种思路,无法比较验证码正确与否,因此无法登录成功。如何让这种情况不发生呢?我们可以将整个服务器集群看作是gobal session(全局session)。
七、bean对象的生命周期
单例对象
出生:当容器创建时对象出生
活着:只要容器还在,对象一直活着
死亡:容器销毁,对象消亡
总结:单例对象的生命周期和容器相同
多例对象
出生:当使用对象时spring框架创建该对象
活着:对象只要是在使用过程中就一直活着
死亡:当对象长时间不用,且没有别的对象引用时,由Java的回收机器回收
八、依赖注入
IOC的作用:降低程序间的耦合(依赖关系)
依赖关系的管理:以后交给了spring维护,在当前类需要用到其他类的对象,由spring为我们提供,我们只需要在配置文件中说明
依赖关系的维护:就称之为依赖注入
(一)使用构造函数注入
使用标签:constructor-arg
标签出现的位置:bean标签的内部
标签中的属性
type | 用于指定要注入的数据的数据类型,该数据类型也是构造函数中某个或某些参数的类型 |
---|---|
index | 用于指定要注入的数据构造函数中指定索引位置的参数赋值,索引的位置从0开始 |
name | 用于指定给构造函数指定名称的参数赋值 |
value | 用于给基本类型和String类型 |
ref | 用于指定其它的bean类型数据,指的是在springioc核心容器中出现过的bean对象 |
优势:在获取bean对象时,注入数据是必须的操作,否则对象无法创建成功
弊端:改变bean对象的实例化方式,使我们在创建对象时,如果用不到这些数据,也必须提供
(二)set方法注入
使用标签:property
标签出现的位置:bean标签的内部
属性:
(1)name:用于指定注入时所调用set方法名称
(2)value:用于提供基本类型和String类型的数据
(3)ref:用于指定其它的bean类型数据。指的是在springioc核心容器中出现过的bean对象。
优势:创建对象时没有明确的限制,可以直接使用默认构造函数
弊端:如果有某个成员必须有值,则获取对象时有可能set方法没有执行
(三)集合类型的注入
用于给List结构集合注入的标签:list,array,set
用于给Map结构集合注入的标签:map,props
结论:结构相同,标签可以互换
set方法注入