spring(3)动态代理事务操作与AOP

6. AOP
    6.1 什么是AOP编程?
    6.2 实现方式:
    6.3 装饰者模式与静态代理对比:
    6.4 动态代理
7. aspectj(基于XML的AOP配置)
    7.1 安装与xml约束
    7.2 AccountServiceImpl 与 Logger  
    7.3 切入点表达式
    7.4 spring 通知(前置、后置、环绕、异常、最终)
8. aspectj(基于注解的AOP配置)
    @EnableAspectJAutoProxy 启用aop
    @Aspect
    @Pointcut("execution(* com.itheima.service.impl.*.*(..))")
    @Before("pt1()")@AfterReturning("pt1()")@AfterThrowing("pt1()")@After("pt1()")@Around("pt1()")

6. AOP

    6.1 什么是AOP编程?

        AOP:面向切面编程,在不修改源代码的情况下给程序动态统一添加功能。在代码阶段实现分离关注,松耦合。然后在运行时将相关动作特征植入运行,从而改变程序的运行顺序,达到拦截或者增加功能的目的。

    6.2 实现方式:

        1.预编译方式(在编译期、类加载期织入),例如AspectJ(解析切入点表达式)
        2.运行期使用动态代理,例如Spring AOP分为jdk代理和CGLIB代理两种方式

    6.3 装饰者模式与静态代理对比:

        装饰模式:以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案;(增强,传入对象)
        代理模式:给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用;(控制,new class)

    6.4 动态代理

        特点:字节码随用随创建,随用随加载   
        作用:不修改源码的基础上对方法增强
        分类:1.基于接口的动态代理 Proxy.newProxyInstance (代理对象必须实现1个接口)
                   2.基于子类的动态代理 cglib

        newProxyInstance()
            @param1 ClassLoader:类加载器。用于加载代理对象字节码的。和被代理对象使用相同的类加载器
            @param2 Class[]:字节码数组:它是用于让代理对象和被代理对象有相同方法
            @param3 InvocationHandler:用于提供增强的代码。通常情况下都是匿名内部类(java中匿名内部类参数必须为final类型。局部变量的生命周期与局部内部类的对象的生命周期的不一致性!)

7. aspectj(基于XML的AOP配置)

        AspectJ 是一个代码生成工具(Code Generator)
        AspectJ 语法就是用来定义代码生成规则的语法
        AspectJ 有自己的语法编译工具,编译的结果是 Java Class 文件,运行的时候,classpath 需要包含 AspectJ 的一个 jar 文件(Runtime lib)

    7.1 安装与xml约束

    7.2 AccountServiceImpl 与 Logger  

    7.3 切入点表达式

<aop:before method="beforePrintLog"
        // 切入点表达式: execution(表达式)
        // 访问修饰符(可省略)
        // 返回值(*代表所有类型) 
        // 包名.包名.包名...类名.方法名(参数列表)(..表示当前包及其子包)
        // 参数列表(..表示有无参数均可)
        // 全通配写法: * *..*.*(..)
        pointcut="execution(public void com.liuming.service.impl.AccountServiceImpl.saveAccount())"></aop:before>

    7.4 spring 通知(前置、后置、环绕、异常、最终)

        aop:config标签表明开始AOP的配置
        aop:aspect标签表明配置切面

        动态代理的环绕通知有明确的切入点方法调用invoke(),而我们的代码没有。Spring框架为我们提供了一个接口:ProceedingJoinPoint。该接口有一个方法proceed(),此方法就相当于明确调用切入点方法.

8. aspectj(基于注解的AOP配置)

        @EnableAspectJAutoProxy 启用aop

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354