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里配置的是,哪些方法你需要给它通知。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、AOP的基础 1.1、AOP是什么??? 考虑这样一个问题:需要对系统中的某些业务做日志记录,比如支付系统中的...
    聂叼叼阅读 2,127评论 2 17
  • 本章内容: 面向切面编程的基本原理 通过POJO创建切面 使用@AspectJ注解 为AspectJ切面注入依赖 ...
    谢随安阅读 3,180评论 0 9
  • 今天 二0一七年四月二十四日 周一 二0一七年第十七周的第一天 天气晴好 有点晒 夏天快来咯 谷雨时节 一...
    四两君阅读 209评论 0 0
  • 今天还是继续做教务系统程序 昨天只是把大概得框架做了出来 和单个函数做了出来 今天就发现问题了 这样做的函数会存在...
    王春雪cs阅读 89评论 0 0
  • 虽然现在是一个自由恋爱的时代,分手变得越来越普通,但你真的想好要分手了吗?说出去的话就像泼出去的水,是收不回来的。...
    一世爱情阅读 653评论 0 1