zoukankan      html  css  js  c++  java
  • 对Spring aop的理解

      记得有次面试中面试官问到,跟我谈谈spring aop,当时我就闷了,当时脑海里只浮现出切入点、切面、引入、通知等等一些很模糊的概念,于是结果可想而知。所以最近用下心来为自己做下记录方便以后查看(为以后的面试做好准备,呵呵),如果以下有什么疏忽的地方或者写的不好的地方,还请发现者多多指导。

      什么是AOP

      AOP(Aspect-OrientedProgramming),也就是面向切面编程。也可以这样理解,学java的应该都知道面向对象编程(oop),而OOP是从静态解读考虑程序结构,但AOP是从动态角度考虑程序运行过程。也可以说AOP是OOP的补充和完善。OOP引入了封装、继承和多态性等概念来建立一种对象层次结构, 用以模拟公共的一个集合。当我们需要为分散的对象引入公共行为的时候,则OOP显得无能为力了。也就是说,OOP允许你定义从上到下的关系,但并不适合从左到右的关系,例如日志功能。日志代码往往水平的散步在所有对象层次中,而与它所散步到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切代码,在oop设计中,他导致了大量代码的重复,而不利于各个模块的重用。

      而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将哪些影响了多个类的公共行为封装到一个可重用模块,并将其名为'Aspect',及方面。 所谓"方面",简单的来说就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来。便于减少系统的重复代码,降低模块间的耦合度等。

      实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取信息的方式,对该信息进行装饰,以取代鱼油对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

    AOP的相关概念

      方面:一个关注点的模块化,这个关注点实现可能另外横切多个对象。事物管理是J2EE应用中一个很好的很横切关注点例子。

      连接点:程序执行过程中明确的点,如方法的调用或特定的异常被抛出。

      通知:在特定的连接点上AOP框架执行的动作。Spring中定义了四个advice: BeforeAdvice, AfterAdvice, ThrowAdvice和DynamicIntroductionAdvice

      切入点:指定一个通知将被引发的一系列连接点的集合。

      引入:添加方法或字段到被通知的类。

      目标对象:含连接点的对象。pojo

      AOP代理(AOP Proxy): AOP框架创建的对象,包含通知。

      织入(Weaving): 组装方面来创建一个被通知对象。

    AOP配置

      这个可以参考其他地方的写法,这里就不多叙述了。

    参考文章地址:http://blog.csdn.net/moreevan/article/details/11977115

  • 相关阅读:
    《冒号课堂》学习笔记 OOP-继承
    《冒号课堂》学习笔记 编程范式汇总
    EF中主表和附表一起提交的话,如果主附表的主键外键已经设定。
    超时时间已到。在操作完成之前超时时间已过或服务器未响应。 解决方法
    wpf下拉框不能多选的原因
    查询中无法构造实体或复杂类型
    wpf新增记录时用多线程的问题
    面向对象
    HTML5入门以及新标签
    前端学习本地存储
  • 原文地址:https://www.cnblogs.com/yuanfy008/p/4171376.html
Copyright © 2011-2022 走看看