zoukankan      html  css  js  c++  java
  • Spring学习——什么是AOP

    在网上查找什么是AOP,查到了下面这段话,我感觉写得清晰明了,一下子就明白了什么是面向切面编程AOP。

    ——————————————————————————————————————————————————————————
    面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承、多态和封装。
    而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。
    实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。
    但是人们也发现,在分散代码的同时,也增加了代码的重复性。什么意思呢?
    比如说,我们在两个类中,可能都需要在每个方法中做日志。按面向对象的设计方法,我们就必须在两个类的方法中都加入日志的内容。
    也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。
    也许有人会说,那好办啊,我们可以将这段代码写在一个独立的类独立的方法里,然后再在这两个类中调用。
    但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。
    那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?
    这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
    一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。
    有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。
    这样看来,AOP其实只是OOP的补充而已。
    OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。
    有了AOP,OOP变得立体了。如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。从技术上来说,AOP基本上是通过代理机制实现的。
    AOP在编程历史上可以说是里程碑式的,对OOP编程是一种十分有益的补充。
    ——————————————————————————————————————————————————————————

    在软件开发中,散布于应用中多处的功能被称为横切关注点。
    通常来说,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往会直接嵌入到应用的业务逻辑之中),比如日志业务。
    把这些横切关注点与业务逻辑相分离正是面向切面编程(AOP)所要解决的问题。

  • 相关阅读:
    MSSQL大量数据时,建立索引或添加字段后保存更改超时该这么办
    POJ 3261 Milk Patterns (后缀数组)
    POJ 1743 Musical Theme (后缀数组)
    HDU 1496 Equations (HASH)
    694. Distinct Substrings (后缀数组)
    POJ 1222 EXTENDED LIGHTS OUT (枚举 或者 高斯消元)
    POJ 1681· Painter's Problem (位压缩 或 高斯消元)
    POJ 1054 The Troublesome Frog (hash散列)
    HDU 1716 排列2
    HDU 4405 Aeroplane chess (概率DP & 期望)
  • 原文地址:https://www.cnblogs.com/cuglkb/p/6806864.html
Copyright © 2011-2022 走看看