zoukankan      html  css  js  c++  java
  • Aspect Oriented Programming

    ===

    动态代理

    实现方式

    jdk动态代理:使用jdk中的Proxy,InvocationHandler创建代理对象

    ​ jdk动态代理要求目标必须实现接口

    cglib动态代理:第三方工具库,创建代理对象,原理是继承。通过继承目标类,创建子类。子类就是代理对象,要求目标类和方法不能是final

    动态代理的作用

    1. 在目标类源代码不变的条件下增加功能
    2. 减少代码冗余
    3. 使开发人员专注于业务逻辑
    4. 解耦合,让业务功能和非业务功能分离

    AOP(Aspect Oriented Programming)

    面向切面编程,基于动态代理,可以使用jdk,cglib两种代理方式。

    AOP就是动态代理的规范化,将动态代理的实现步骤和方法都定义好,让开发人员

    用统一的方式使用动态代理

    • Aspect:切面,指给目标类额外增加的功能

      切面的特点:一般都是非业务方法,常见为日志,事务,统计,参数检查,权限验证等

    • Orient:面向

    • Programming:编程

    1. 需要在分析项目功能时找出切面(独立于业务的增强方法)
    2. 合理的安排切面执行时间(目标方法前or后)
    3. 合理的安排切面执行的位置,在哪个类,哪个方法添加增强功能

    一些术语

    1. Joinpoint:连接点,连接业务和增强方法的位置
    2. Pointcut:切入点,指多个连接点集合
    3. 目标对象:欲增强方法的类
    4. Advice:通知,表示切面功能的执行时间

    一个切面有三个关键要素

    1. what:切面的功能代码,要干什么
    2. where:切面执行位置,用pointcut表示
    3. when:切面执行时间,用Advice表示

    AOP的实现

    aop是一个规范,是动态代理的规范和标准

    实现框架:

    1. spring:spring在内部实现了aop规范,能做aop工作

      spring主要在事务处理使用aop。

      但由于其实现较笨重,在项目开发中很少使用spring的aop

    2. aspectJ:一个开源的专门做aop的框架,spring框架中集成了aspectj框架,可直接通过spring使用aspectj的功能

      实现方式:

      • xml配置文件:配置全局事务
      • 注解实现是更常用的方法,aspectj有5个注解。

    学习aspectj框架的使用

    切面的执行时间,这个执行时间在规范中叫做Advice(通知,也有人称为增强),在aspectj框架中使用注解表示执行时间点:(xml标签也可以)

    • @Before
    • @AfterReturning
    • @Around
    • @AfterThrowing
    • @After

    aop实现步骤

    image-20210314172339857

    具体代码见:

    github.com/AndyLeezCode/Learn_Spring/tree/master/ch05-aop-leading

    github.com/AndyLeezCode/Learn_Spring/tree/master/ch06-aop-aspectj

    小结

    8DAE2181483EE3CEC7D7A64B68086440

    4816E6F7DB1E5FAE44C403D887DF8F18

  • 相关阅读:
    perl学习笔记三
    linux下编译C/C++
    redis学习笔记——数据类型
    redis学习笔记二
    perl学习笔记二
    hadoop实战 -- 网站日志KPI指标分析
    Java反射与动态代理
    使用maven来管理您的java项目
    使用MapReduce实现一些经典的案例
    编译本地64位版本的hadoop-2.6.0
  • 原文地址:https://www.cnblogs.com/potofsalt/p/14533460.html
Copyright © 2011-2022 走看看