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 切入点表达式

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

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

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

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

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

        @EnableAspectJAutoProxy 启用aop

你可能感兴趣的:(spring(3)动态代理事务操作与AOP)