第3章:JavaSpringAOP概念详解_java 中的springaop

本文探讨了AOP(面向切面编程)与OOP(面向对象编程)的区别,强调了两者在封装关注点和处理横切问题上的不同。通过实例和SpringAOP中的概念解释,以及AOP的通知类型和实际应用场景的分析,突出了设计模式如设计模式在软件开发中的重要性,特别提到了Spring、SpringMVC和MyBatis等框架的应用.
摘要由CSDN通过智能技术生成
+ AOP、OOP在字面上虽然非常类似,但却是面向不同领域的两种设计思想。OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。
+ 而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。这两种设计思想在目标上有着本质的差异。
+ 上面的陈述可能过于理论化,举个简单的例子,对于“雇员”这样一个业务实体进行封装,自然是OOP/OOD的任务,我们可以为其建立一个“Employee”类,并将“雇员”相关的属性和行为封装其中。而用AOP设计思想对“雇员”进行封装将无从谈起。
+ 同样,对于“权限检查”这一动作片断进行划分,则是AOP的目标领域。而通过OOD/OOP对一个动作进行封装,则有点不伦不类。
+ 换而言之,OOD/OOP面向名词领域,AOP面向动词领域。
  • 关系

    • 很多人在初次接触 AOP 的时候可能会说,AOP 能做到的,一个定义良好的 OOP 的接口也一样能够做到,我想这个观点是值得商榷的。AOP和定义良好的 OOP 的接口可以说都是用来解决并且实现需求中的横切问题的方法。但是对于 OOP 中的接口来说,它仍然需要我们在相应的模块中去调用该接口中相关的方法,这是 OOP 所无法避免的,并且一旦接口不得不进行修改的时候,所有事情会变得一团糟;AOP 则不会这样,你只需要修改相应的 Aspect,再重新编织(weave)即可。 当然,AOP 也绝对不会代替 OOP。核心的需求仍然会由 OOP 来加以实现,而 AOP 将会和 OOP 整合起来,以此之长,补彼之短。

1.2 相关术语

  1. 切面(Aspect):指关注点模块化,这个关注点可能会横切多个对象

在SpringAOP中,切面可能使用通用类基于模块的方式(Schema
-based approach)或者在普通类中以@Aspect注解来实现

  1. 连接点(JoinPoint):在程序执行过程中某个特定的点,例如某个方法调用的时间点或者处理异常的时间点。在SpringAOP中,连接点总是代表一个方法的执行。
  2. 通知(Advice):在切面的某个特定的连接点执行的动作。通知有多种类型,包括"Before",“After”,“After”,“AfterReturning”,“AfterThrowing”,"Arround"等等,通知的类型将在后面的章节进行详细的讲解
  3. 切点(Pointcut):匹配连接点的断言。通知和切点表达式相关联,并在满足这个切点的连接点上运行。
  4. 引入(Introduction):申明二外的方式或者某个类型的字段
  5. 目标对象(Target Object):被一个或者多个切面所通知的对象。也被通知(Advice)对象。既然SpringAOP是通过运行时代理实现的,那么这个对象永远都是一个被代理(Proxied)的对象
  6. AOP代理(AOP Proxy):AOP框架创建的对象,用来实现切面契约(Aspect Contract)(包括通知方法执行等功能)。在Spring中AOP代理可以是JDK动态代理或者CGLib代理。
  7. 织入(Weaving):把切面连接到其他的应用程序类型或者对象上,创建一个被通知的对象的过程。

1.3 AOP的通知类型

  1. 前置通知(Before):在连接点之前运行但无法阻止执行流程静茹连接点的通知
  2. 后置通知(After):在连接点之后运行,总会执行
  3. 后置返回通知(AfterReturning):在连接点正常完成后执行的通知
  4. 后置异常通知(AfterThrowing):在连接点中出现异常执行的通知
  5. 环绕通知(Arround):将整个方法包起来的通知

2. AOP的应用场景

  1. 日志管理
  2. 权限认证
  3. 安全检查
  4. 事务管理

言尽于此,完结

无论是一个初级的 coder,高级的程序员,还是顶级的系统架构师,应该都有深刻的领会到设计模式的重要性。

  • 第一,设计模式能让专业人之间交流方便,如下:

程序员A:这里我用了XXX设计模式

程序员B:那我大致了解你程序的设计思路了

  • 第二,易维护

项目经理:今天客户有这样一个需求…

程序员:明白了,这里我使用了XXX设计模式,所以改起来很快

  • 第三,设计模式是编程经验的总结

程序员A:B,你怎么想到要这样去构建你的代码

程序员B:在我学习了XXX设计模式之后,好像自然而然就感觉这样写能避免一些问题

  • 第四,学习设计模式并不是必须的

程序员A:B,你这段代码使用的是XXX设计模式对吗?

程序员B:不好意思,我没有学习过设计模式,但是我的经验告诉我是这样写的

image

从设计思想解读开源框架,一步一步到Spring、Spring5、SpringMVC、MyBatis等源码解读,我都已收集整理全套,篇幅有限,这块只是详细的解说了23种设计模式,整理的文件如下图一览无余!

image

搜集费时费力,能看到此处的都是真爱!

3种设计模式,整理的文件如下图一览无余!

[外链图片转存中…(img-MQ0CZ6m8-1714778333895)]

搜集费时费力,能看到此处的都是真爱!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 29
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值