Spring是分层的JavaSE/EE full-stack轻量级开源框架,以IoC(Inverse of Control 反转控制)和AOP(Aspect Oriented Programming 面向切面编程为内核)。
一、IoC
所谓IoC就是inverse of control 控制反转,将对象的创建权(实例化) 交予spring框架创建过程。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。
举例,我们在学习三层的时候都知道Service层的类要调用Dao的方法,必须在Service类中添加对Dao的引用,才能调用Dao的方法。回顾一下我们的引用方式:
1.使用new
2.使用接口
3.使用工厂
以上几种,都是我们以前学习过的。其中前两种我们知道,Service层和Dao的依赖比较严重,为了使Service和Dao之间进行解耦,我们引入了工厂,但是它也有弊端:
1.工厂类依旧需要去了解具体的实现类以及其参数,当程序复杂度到一定程度时,工厂类依旧可能很复杂。
2.还是必须要有源码才能更新工厂类的代码,才能重新编译。
基于以上原因,我们引入了Spring IoC.
Spring IoC通过配置文件配置:
这样写的优点在于,不需要代码书写工厂类了,只是一个简单的XML配置文件,就搞定了。
二、AOP
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
AOP的相关术语如下:
1.Target:目标对象,被代理对象。例如:UserService
2.JoinPoint 连接点,目标对象中被代理的方法(掉)。例如:saveUser()/updateUser/deleteUser/findUser
3.PointCut 切入点,实际上被代理的方法,及实际上的连接点。例如:saveUser切入点是连接点子集
4.Advice 通知/增强,在切入点前或后执行的方法。例如:before、after
分类:前置通知、后置通知,环绕通知等,通知是对方法进行增强。
5.Introduction,引介,特殊的通知。对类直接增强。给类添加方法,修改不要方法等。