美文网首页
spring(3)动态代理事务操作与AOP

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

作者: 机智的老刘明同志 | 来源:发表于2020-07-20 00:36 被阅读0次

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

相关文章

  • Spring学习系列--3.AOP

    Spring Aop Aop面向切面编程 Aop入门动态代理 动态代理,其实与Aop的原理有些相似,可以用动态代理...

  • 内部方法调用时,aop失效

    Spring管理实务使用aop 对事务进行处理,方法前开启事务,方法后提交事务,aop使用动态代理生成代理对象调用...

  • Spring AOP中的动态代理

    Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理: (3)静态代理与动态代理区别...

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

    6. AOP 6.1什么是AOP编程? 6.2 实现方式: 6.3 装饰者模式与静态代理对比: 6.4 动态代理...

  • Spring事务线程安全synchronized

    spring 事务处理的底层是Spring AOP,而Spring AOP的底层是动态代理技术。所以锁加锁后,锁执...

  • spring aop 汇总

    静态代理、动态代理和cglib代理 aop 使用 Spring AOP - 注解方式使用介绍spring aop ...

  • Spring AOP 实现原理

    Spring AOP 实现原理 静态代理 众所周知 Spring 的 AOP 是基于动态代理实现的,谈到动态代理就...

  • java动态代理

    目录: 简介 jdk动态代理 cglib动态代理 jdk动态代理与cglib的区别 应用spring的aop 简介...

  • 2018-03-21

    与AspectJ的静态代理不同,Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码...

  • 2018-01-31

    spring aop @(iJava)[spring framework] [toc] aop底层原理采用动态代理...

网友评论

      本文标题:spring(3)动态代理事务操作与AOP

      本文链接:https://www.haomeiwen.com/subject/zlxocktx.html