前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring框架中AOP技术

Spring框架中AOP技术

作者头像
吉林乌拉
发布2019-08-14 17:38:15
4630
发布2019-08-14 17:38:15
举报
文章被收录于专栏:吉林乌拉吉林乌拉

在上几篇中本人基本已经将IOC容器涉及到的知识全部介绍完了,从今天起我们学习一下spring中的另一个非常重要的技术AOP。AOP并不是spring中所独创的技术,因为AOP可以理解为是一种编程思想,例如OOP(面向对象编程)一样。只是最近它才被作为一项技术真正的用于软件开发中的。那么到底什么是AOP呢?AOP的全称为Aspect Oriented Programing。看翻译我们基本就可以猜出AOP的名字了,也就就是我们常常听说的面象切面编程。我们通过下面的例子来展示AOP到底能够解决我的方法中的什么问题?

我们在日常开发时知道,如果多个类中有相同的代码,那么我们就要考虑抽取一个公共的抽象类或接口,将多个类中的相同的代码提取到抽象类中去实现,不同的逻辑放到相应的子类中去处理,这样不但方便我们开发与维护,还遵循了软件重构的思想。那么这样真的能消除掉决子类中的重复代码吗?我们看下面的例子:

我们看上述的代码UserService类中只有简单的代码,我们用一条输出语句代替具体的业务逻辑,但是在我们日常开发,常常需要向上述的代码一样,为相应的逻辑添加事物以解决一致性的问题。这时上述的代码的弊端也就展现出来的,也就是业务代码中会有大量的事物管理的代码,并且这些代码,我们并没办法法通过提取抽象类的方法解决。这时如果我们想要消除到业务逻辑里的事物代码就要考虑使用AOP解决了。那么spring中怎么用AOP解决上述问题呢?先不要着急,我们先抛砖引玉在后面的文章中我们在看具体的解决办法法,我们接下来了解一下spring中AOP其它方法的知识。

在spring的AOP中定义了一些基本的术语,我们下面将介绍这些术语的具体名字与作用。

  • 连接点

程序执行的某个特定位置,也就是类的方法调用前、调用后、方法抛出异常后等。在spring中连接点只支持方法的连接点,也就是只能在类的方法调用前、调用后、方法抛出异常后等。

  • 切点

切点就也是定位特定的连接的。简单一点的比喻就是连接点相当于数据库的记录,而切点就相当于查询条件。所以,在spring中切点与连接点不是一一对应的关系,一个切点可以匹配多个连接点。

  • 增强

增强就是添加到目标类连接点上的代码,也就是上述我们例子中的添加事物的代码。正是因为如此,所有spring为我们提供的增强接口都是带方位名的,例如BeforeAdvice、AfterReturningAdvice等。

  • 目标对象

也就是添加增强逻辑的目标类。

  • 引介

一种特殊的增强,它可以为类添加一些属性和方法。即使这个类没有实现某个接口,通过引介也可以动态为该类添加接口的实现逻辑。

  • 织入

织入就是将增强添加到目标类具体连接点的过程。AOP有三种类型的织入它们分别是:

  1. 编译期织入
  2. 类装载期织入
  3. 动态代理织入,在运行期为目标类添加增强生成子类的方法。

spring采用动态织入,而AspectJ采用编译织入和类装载期织入。

  • 代理

目标类被增强后就会生成一个新的包括增强逻辑的代理类。我们就是使用这个代理类,来完成我们横切的逻辑。

  • 切面

切面由切点和增强组成,它即包括横切的逻辑,也包括连接点的定义。

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

本文分享自 吉林乌拉 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档