20200229——Spring复习 框架概述以及spring中基于xml的配置 一
spring是分层的javaSE/EE应用,full-stack轻量级开源框架,以IOC控制反转和AOP面向切面编程
spring的优势
方便解耦,简化开发
通过IOC容器,可以将对象的关系交给Spring进行控制管理,避免硬编码所造成的过度程序耦合,用户也不必再为单例模式,属性文件解析这些很底层的代码进行编写
我觉得就是依赖注入和依赖查找
削减耦合,并不是完全消除
AOP编程支持
程序间的耦合
比如jdbc程序,如果我们不引入mysql的驱动包,程序就运行不了
耦合:程序间的依赖关系
包括两种,类之间的依赖关系 方法间的依赖关系
解耦:降低程序间的依赖关系
实际开发中
编译器不依赖,运行时才依赖
解耦的思路
第一步,使用反射来创建对象,而避免使用关键字new
第二步,通过配置文件来获取创建的对象全限定类名
上升到java web
在没有使用spring的时候,表现层调用业务层,需要创建业务层对象的实例
但是这样就具有了耦合行
javabean
bean 在计算机语言中,有可重用的组件
spring就相当于相当于一个bean工厂
创建service和dao对象
第一个 需要配置文件来配置我们service和dao 配置的内容,全限定类名与唯一标识 key,value
第二个 通过读取配置文件中配置内容,创建反射对象
自定义Spring
创建一个BeanFactory
有一个属性
在有个静态块
在resource文件夹有bean.properties
getBean方法获取bean
就可以在表现层通过BeanFactory得到bean对象了
单例多例
我们创建一个map的容器对象,把对象创建好的实例放在容器中,这样就可以实现单例模式,每次都进容器去查找对象
然后不用在getBean方法中每次都创建实例了
** 导入Spring**
创建bean.xml
在beans标签内部,每一个管理的bean用标签注入
id是自己起的名字 class为全限定类名
我们要获取相当于我们自定义的内个map,也就是ApplicationContext这个类,在找到他的实体类对象
根据id获取两种方法
ApplicationContext三个常用实现类
ApplicationContext引发问题
ApplicationContext构建核心容器的时候,创建对象采用的策略是用立即加载的方式,读取配置文件马上创建配置文件的内容
而BeanFactorty是采用延迟加载方式,什么根据id获取到了,才创建对象
Spring创建bean的三种方式
第一种
必须有默认构造函数
第二种
利用工厂创建
第三种用静态方法
bean的作用范围
bean对象默认是单例的
但是bean标签有一个scope属性,作用是用于指定bean的作用范围
singleton 单例
prototype 多例
request 作用于web应用的请求范围
session 组用于web应用的会话范围
global-session 作用于集群环境的会话范围
bean生命周期
单例对象 与容器生命周期相同
多例对象 使用对象的时候Spring会帮我们创建, 对象只要在使用就一直存在,长时间不用会被java回收器回收
依赖注入
简单来说,就当前类中的属性,基本数据类型和bean类型 集合类型
第一种
构造函数提供
比如在这个程序中我们birthday是日期类型,那么我们可以
把上面的value属性改为ref ref =“now”
小总结,value是提供基本数据类型和String
ref 是指的是其他的bean
这种构造函数的弊端
第二种是今后使用的依赖注入
有set方法可以注入