前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AOP面向切面编程

AOP面向切面编程

作者头像
木瓜煲鸡脚
发布2019-10-10 15:41:05
1.2K0
发布2019-10-10 15:41:05
举报
文章被收录于专栏:Jasper小笔记Jasper小笔记

AOP面向切面编程

  1. AOP概念
    1. 简介
    2. 内部原理
    3. JDK动态代理
    4. CgLib动态代理
    5. 相关术语
  2. Spring-aop使用
    1. 搭建项目
    2. 编写切面类
    3. 配置
  3. aop配置
    1. 切入点
    2. 切面
  4. aop注解方式

1

AOP概念

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,

通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。

利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

AOP内部原理(动态代理)

在传统开发中去增强一个方法的功能,是采用纵向继承的方式给方法加上扩展功能,缺点是需求变化时就需要去修改业务类方法中的内容(去掉扩展功能或者换成另一个功能)

而采用AOP则是生成代理类来增强功能,不用修改原类

JDK动态代理

使用JDK动态代理需要实现接口的类才能被动态代理

给work方法增加study功能

测试

cglib动态代理

cglig是一个第三方开源代码 生成类库,动态添加类的属性和方法。在spring的核心包当中已经引入了cglib,采用的是继承方式来产生的代理对象

Spring的AOP简介

AOP思想最早是由AOP联盟组织提出的

Spring使用这种思想最好的框架

AspectJ

Spring的AOP有自己的实现方式,但是这种方式非常繁琐

AspectJ 是一个AOP的框架

Spring放弃了自己传统的方式 ,引入AspectJ作为自身AOP的开发

相关术语

1.Joinpoint:连接点

可以被拦截到的方法

能够被增强的方法,这些方法就可以称为是连接点

比如下面的work方法就是接入点,它可以被增强

2.Pointcut:切入点

连接点是可以被增强的方法,切入点是已经被增强了的方法

3.Advice:通知

增加的内容,通常都是封装成一个方法, 这个方法我们就称为通知

4.Introduction:引介

类层面的增加

给原有的类添加一些新的属性方法

在开发中通常都是给方法进行增加

5.Target:被增加的对象

6.Weaving:织入,将通知应用到目标对象的过程

7.Proxy:代理对象

8.Aspect:切面,多个通知和多个切入点的集合

2

Spring-AOP使用

新建项目-导包-配置文件

后四个是Spring核心包,前面是AOP需要的

配置AOP有关约束

applicationContext.xml

编写切点与切面类

把work方法作为切入点

然后有一个切面里面有多个通知

配置(指定哪个切入点添上哪个通知)

测试

结果(添加成功)

3

AOP配置

配置切入点

id给每个切入点取的唯一标识,expression指定切入点通过execution函数来完成:【访问修饰符】 方法返回值 包名.类名.方法名(参数)

切入面配置

ref指定切入面:前面配置好的id名

method:选择哪个通知

poincut-ref:选择加到哪个切入点(切入点的id)

通知类型

before:前置通知,即在原方法体前加上通知

after-returning:后置通知

around:环绕通知,前后都加一条

after-throwing:异常通知,程序异常时加上此通知

after:最终通知,原方法有无异常通知都会执行上去

4

AOP注解方式ApsectJ开发

在配置文件开启使用

在切面类的通知上添加注解

把通知2添加到work方法

注解AOP通知类型

@Before前置通知

@AfterReturning后置通知

@Around环绕通知

@AfterThrowing异常抛出通知

@After最终通知

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT那个小笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档