zoukankan      html  css  js  c++  java
  • 4.AOP

    1.代理模式

    代理模式(Proxy Pattern)是GoF23种常用设计模式之一
    使用代理模式创建代理对象,让代理对象控制目标对象的访问,并且可以在不改变目标对象的情况下添加一些额外的功能
    包括静态代理、动态代理。

    静态代理:

    静态代理实现:
    代理对象与被代理对象必须实现同一个接口,在代理对象中实现日志等服务
    问题:
    代理对象的一个接口只服务于一种类型的对象
    如果要代理的方法很多,要为每种方法进行代理
    静态代理在程序规模稍大时无法胜任

    动态代理 :

    JDK1.3之后加入了实现动态代理的API
    InvocationHandler接口
    关键:使用Proxy.newProxyInstance()静态方法建立一个代理对象(建立代理对象必须告知要代理的接口)
    操作代理对象时会执行invoke()方法。

    2.AOP概述

    AOP简介:

    AOP( Aspect-Oriented Programming ,面向切面编程)
    提供了一种新的组织程序结构的思路
    是对OOP的补充,而不是替代,经常和OOP一起使用
    OOP的核心单位是类,而AOP则是切面
    典型的例子包括日志、验证、事务管理等
    优点:
    使开发人员集中关注于系统的核心业务逻辑
    更利于创建松散的、可复用、可扩展的软件系统

     AOP概念:

    关注点(concern):
    一个关注点可以是一个特定的问题、概念或者程序要达到的一个目标。比如日志记录等都是关注点。如果一个关注点的代码被多个类或方法引用,这个关注点就被称为横切关注点
    切面(aspect):
    一个切面是对一个横切关注点的模块化
    连接点(joinpoint):
    程序执行过程中的某个点,如方法调用或者抛出异常等

    通知(advice):
    在特定的连接点应该执行的动作,在多数AOP框架中,通知都是由拦截器实现的,Spring AOP也是如此(定义何时)
    切入点(pointcut):
    定义在哪些连接点处使用通知,在应用中一般通过指定类名、方法名或者匹配类名、方法名的正则表达式来指定切入点(何地)
    目标对象(target):
    被切面所通知的对象
    织入(weaving):
    将切面应用到目标对象,从而创建新的代理对象

     通知类型:

    前置通知(Before advice):
    在某连接点之前执行的通知
    后置通知(After returning advice):
    在某连接点正常完成后执行的通知
    异常通知(After throwing advice):
    在方法抛出异常退出时执行的通知
    最终通知(After finally advice):
    当某连接点退出的时候执行的通知
    环绕通知(Around advice):
    包围一个连接点的通知,这是最强大的一种通知类型

    3.Spring AOP

    Spring AOP介绍:

    Spring AOP是由纯Java语言实现
    Spring AOP和其他AOP框架不同,目的并不是提供最完整的AOP,目前仅支持方法执行上的连接点;但是他和Spring的IoC集成紧密,可以帮助解决企业应用中的常见问题
    当Spring AOP不能满足我们的需求时,可以采用其他AOP框架,比如AspectJ,Spring框架可以很好的集成诸如AspectJ等框架,他们是互补的

     Spring AOP实现:

    Spring AOP提供了3种实现方式:
    实现SpringAPI的传统方式
    纯POJO类(Advice不用实现任何接口)
    一种基于Schema的XML配置,用<aop>标签
    一种基于注解驱动的切面
    使用AspectJ切面

    实现Spring AOP的传统方式:

    经典的基于代理的AOP,适用于所有版本
    实现步骤:
    编写通知
    编写切点
    Spring自动创建代理对象

    纯粹POJO方式-基于Xml

    Spring2.x以后提供了新的aop的命名空间
    来定义切面等内容
    通知不需要实现特定的接口
    切面都集中在xml文件中,更加集中、清晰

    纯粹POJO方式-基于Annotation
    @AspectJ 是一种使用普通Java类注解
    来声明AOP切面的方式
    开启@AspectJ支持
    开启Java的配置方式:@EnableAspectJAutoProxy
    开启Xml的配置方式:<aop:aspectj-autoproxy />

  • 相关阅读:
    P1144 最短路计数 题解 最短路应用题
    C++高精度加减乘除模板
    HDU3746 Teacher YYF 题解 KMP算法
    POJ3080 Blue Jeans 题解 KMP算法
    POJ2185 Milking Grid 题解 KMP算法
    POJ2752 Seek the Name, Seek the Fame 题解 KMP算法
    POJ2406 Power Strings 题解 KMP算法
    HDU2087 剪花布条 题解 KMP算法
    eclipse创建maven项目(详细)
    maven的作用及优势
  • 原文地址:https://www.cnblogs.com/Firesun/p/9909923.html
Copyright © 2011-2022 走看看