ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Aspect Oriented Programming

2021-03-14 18:01:07  阅读:206  来源: 互联网

标签:spring Programming 代理 Oriented 切面 Aspect aop 动态 aspectj


===

动态代理

实现方式

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

标签:spring,Programming,代理,Oriented,切面,Aspect,aop,动态,aspectj
来源: https://www.cnblogs.com/potofsalt/p/14533460.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有