• Java笔记——面向切面编程(AOP模式)


    原文:http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html

    Aspect Oriented Programming  面向切面编程。解耦是程序员编码开发过程中一直追求的。AOP也是为了解耦所诞生。

    具体思想是:定义一个切面,在切面的纵向定义处理方法,处理完成之后,回到横向业务流。

    AOP 在Spring框架中被作为核心组成部分之一,的确Spring将AOP发挥到很强大的功能。最常见的就是事务控制。工作之余,对于使用的工具,不免需要了解其所以然。学习了一下,写了些程序帮助理解。

    AOP 主要是利用代理模式的技术来实现的。
    图片

    ============================

    1、静态代理:就是设计模式中的proxy模式 


    a.业务接口
    图片

    b.业务实现
    图片


    c.代理对象
    图片

    d.测试类
    图片


    从这段代码可以看出来,代理模式其实就是AOP的雏形。 上端代码中talk(String msg, String singname)是一个切面。在代理类中的sing(singname)方法是个后置处理方法。

    这样就实现了,其他的辅助方法和业务方法的解耦。业务不需要专门去调用,而是走到talk方法,顺理成章的调用sing方法

    再从这段代码看:1、要实现代理方式,必须要定义接口。2、每个业务类,需要一个代理类。


    ============================
     
    2、动态代理:jdk1.5中提供,利用反射。实现InvocationHandler接口。 


    a.代理类
    图片

    b.测试类
    图片


    输出结果会是:
     

    切面之前执行
    people talk业务说法
    切面之后执行

     

    说明只要在业务调用方法切面之前,是可以动态的加入需要处理的方法。

    从代码来看,如果再建立一个业务模块,也只需要一个代理类。ITalk iTalk = (ITalk) new DynamicProxy().bind(new PeopleTalk());  将业务接口和业务类绑定到动态代理类。

    但是这种方式:还是需要定义接口。

     ============================

    3、利用cglib 

    a.业务类
    图片 


    b.代理类
    图片 


    c.测试类
    图片

    最后输出结果:
     

    事物开始
    people talk业务方法
    事物结束
    事物开始
    spreak chinese业务方法
    事物结束



     

  • 相关阅读:
    Bootstrap 网页1
    Bootstrap 网页实例
    Bootstrap 警告框
    Bootstrap 表格
    Bootstrap 小功能
    【BZOJ1706】[usaco2007 Nov]relays 奶牛接力跑 矩阵乘法
    【BZOJ3669】[Noi2014]魔法森林 LCT
    【BZOJ2049,2631,3282,1180】LCT模板四连A
    【BZOJ4071】[Apio2015]巴邻旁之桥 Treap
    【BZOJ1009】[HNOI2008]GT考试 next数组+矩阵乘法
  • 原文地址:https://www.cnblogs.com/pwc1996/p/4839150.html
Copyright © 2020-2023  润新知