Spring总结篇(6):AOP原理+案例解析

AOP(aspect oriented programming),面向切面(方面)编程,是对所有对象或者是一类对象编程。(面向n多对象编程)(核心为:在不增加代码的基础上,还增加新功能)


1.AOP术语概念介绍                      

1.切面(aspect):要实现的交叉功能,是系统模块化的一个切面或领域,如:日志记录等

2.连接点:应用程序执行过程中插入切面的地点,可以是方法调用、异常抛出、修改字段等

3.通知:切面的实际实现,它通知了系统新的行为。如:在日志通知包含实现日志功能的代码。

4.切入点:定义通知应该应用在哪些连接点,通知可以应用到AOP框架支持的任何连接点。

5.引入:为类添加新的方法和属性

6.目标对象:被通知的对象,一般实现接口,是你自己所编写的类

7.代理:将通知应用到目标对象而创建的对象,简称代理对象,应用系统的其它部分不用为了支持代理对象而改变

8.织入:将切面应用到目标对象从而创建一个新代理对象的过程,织入发生在目标对象生命周期的多个点上


2.AOP案例原理解析

(1)原理图及初期需求(在使用sayHellow前,写日志信息)(初期要求只是为了了解AOP的整个编程流程,后期会增加需求)

步骤说明:

1.定义接口(要在下面代理对象里配置)

这里定义了两个接口:TestServiceInter和TestServiceInter2,其中定义了sayHellow和sayBye方法

2.编写对象(实现接口)(被代理对象,目标对象)


3.编写通知(前置通知是在目标方法调用前调用)(具体通知类型如下)

(这里我们配置一个前置通知:MyMethodBeforeAdvice实现MethodBeforeAdvice接口)


4.在beans.xml文件配置:


beans.xml

4.1.配置被代理对象   

4.2.配置通知 (这里配置的是前置通知)   

4.3.配置代理对象(重点)(它是ProxyFactoryBean对象实例)(只需配置,不需写)       

4.3.1 配置代理接口 (代理接口集)         

4.3.2 把通知织入到代理对象         

4.3.3  配置被代理对象,可以指定   

对照上面beans.xml图,这里对应的是需要配置的,以及它们之间的关系

(2)需求:在调用完Test1Service后完成资源的关闭 (这里用到后置通知) 

--创建后置通知MyAfterReturningAdvice实现AfterReturningAdvice接口

--在beans.xml中配置

--结果:

(3)环绕通知(在一进入函数方法后,再一次进行拦截,方法执行前调用一次,方法执行后调用一次,环绕这个方法函数)

--创建环绕通知MyMethodInterceptor实现接口MethodInterceptor

--在beans.xml配置同上

--结果:

(4)异常通知(如果执行目标函数有异常将会被自动调用)

---创建MyThrowsAdvice实现ThrowsAdvice接口(同上)

---配置 同上

(5)引入通知(只要在beans.xml中配置就好)(案例解析:我不想在调用sayBye方法时,进行前置通知,我们只希望在调用sayHellow时,来进行前置通知)


其中list里配置的是,哪些方法你需要给它通知。

你可能感兴趣的:(Spring总结篇(6):AOP原理+案例解析)