Spring框架
我们目前学习的框架整合有
ssh框架整合:struts2框架,spring框架,hibernate框架
ssm框架整合:springMVC框架,spring框架,MyBatis框架
ssm框架整合:springMVC框架,spring框架,mongodb数据库
包括我们之后会学习到的连接其数据库的整合项目中都使用到了spring框架,今天我们就对spring框架进行一下详细深入的了解(仅个人观点)因为在复习整合ssh和ssm时遇到的问题就是对spring框架的作用很是了解,但是对spring的原理一直不是很理解。
今天通过网上的观点以及自己的理解对spring进行简单的汇总。
首先spring框架有两个核心:
1> IOC Inversion of control,控制反转
A:为什么要引入IOC容器 解耦
首先说明一下IOC在ssm整合框架中的作用,我们在使用IOC容器之后,将所有对象的创建与销毁都交给了IOC去操作,即是IOC容器在运行期间,动态的将某种依赖关系注入到对象中去,也就是实现了对象之间的解耦。我们每个对象之间都不可避免的有一些依赖关系,比如一个对象里面需要另一个对象,在对象较少时不会产生问题,但是当对象非常多的时候,就会有一定的耦合性,为了解耦,我们引入了IOC。通过几幅图进行详细的说明,
在没有IOC之前
当只有四个类的时候哪怕有依赖关系也可以。
但是当对象非常多时 如上图,依赖关系就会非常复杂,这时就会有耦合性。
这时就引入了IOC,IOC作为一个第三方的容器,将各个对象类封装之后,通过IoC容器来关联这些对象类。这样对象与对象之间就通过IoC容器进行联系,但对象与对象之间并没有什么直接联系,达到降耦的作用。
B:IOC为什么称为控制反转
软件系统在没有引入IoC容器之前,对象A依赖对象B,那么A对象在实例化或者运行到某一点的时候,自己必须主动创建对象B或者使用已经创建好的对象B,其中不管是创建还是使用已创建的对象B,控制权都在我们自己手上。
如果软件系统引入了Ioc容器之后,对象A和对象B之间失去了直接联系,所以,当对象A实例化和运行时,如果需要对象B的话,IoC容器会主动创建一个对象B注入到对象A所需要的地方。
通过前面的对比,可以看到对象A获得依赖对象B的过程,由主动行为变成了被动行为,即把创建对象交给了IoC容器处理,控制权颠倒过来了,这就是控制反转
C:控制反转的是什么?
我们控制反转的是 获得依赖对象的过程
D:IOC的工作原理
Don’t call us, we’ll call you(别找我,我会来找你的)。也就是说,所有的组件都是被动的,所有的组件初始化和调用都由容器负责。组件处在一个容器当中,由容器负责管理。简单的来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控,即在一个类中调用另外一个类。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,即所谓反转
E:IOC的重要组件
1. Bean
Bean的id从Bean配置文件中取得该Bean的类,并生成该类的一个对象,继而从配置文件中获得该对象的属性和值,也就是可以将一个对象和另一个对象之间的关系保存下来。
2. beanfactory
BeanFactory采用了工厂设计模式,即Bean容器模式,负责读取Bean的配置文件,管理对象的生成、加载,维护Bean对象与Bean对象之间的依赖关系,负责Bean的生命周期,对于简单的应用程序来说,使用BeanFactory就已经足够管理Bean,在对象的管理上就可以获得许多便利性。
F:IOC的几种注入 方式
1. setter注入常用
图解如上 对应实体类的各个属性
2. 构造方法注入常用
可通过下标也可以通过name注入
3. 静态工厂注入
- 非静态工厂注入
2> AOP Aspect-OrientedProgramming,面向方面编程
一:AOP引入的必要性
事务的四个特性:
原子性:
一致性:
隔离性 :
持续性:
我们在操作数据库时每次进行操作之后倒要对事物进行提交,非常的不方便而且麻烦,所以我们使用spring的AOP来统一管理事务
二:AOP核心概念
1、横切关注点:对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点
2、切面(aspect):类是对物体特征的抽象,切面就是对横切关注点的抽象
3、连接点(joinpoint):被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器
4、切入点(pointcut):对连接点进行拦截的定义
5、通知(advice):所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类
6、目标对象:代理的目标对象
7、织入(weave):将切面应用到目标对象并导致代理对象创建的过程
8、引入(introduction):在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段
三:AOP是如何实现对事物的操作的