什么是Spring AOP

159 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

AOP 的概念

对比与面向对象编程(OOP),AOP 是“面向切面编程”。我们应该着重理解什么是“切面”。

对于任何一个系统,一些系统方面的需求(日志打印、安全检查、事务管理等等)都是必不可少的。如果要通过OOP 的方式实现,这就像一把把小刀分别插入到我们的各个业务对象中去。

于是我们就可以思考一下,为何不声明一把“长刀”,将各个业务对象码整齐,然后统一“切入”。一个很形象的图片可以解释这个功能:

image.png

这些系统需求就像一把长刀,在各个业务对象的相同的关注点上,横切入各个业务对象中去。使用传统的面向对象的方式,我们无法完成这个功能,所以基于“面向切面编程”的理念,开发者提出了Aspect 的概念,来模块化地对系统中的“横切点”的概念进行封装。

相比于OOP 的概念中的类(class),AOP 中相同地位和角色的概念就是Aspect。

其实,AOP 仅仅是在业务开发中针对OOP 的一个补足,当我们在实际工作中将AOP 和OOP 结合在一起的时候,整个系统就会很好地工作了。

AOP 对于开发者来说,只是一种“理念”。而我们如果想要实现这种理念,就需要寻找一种方式。对于OOP 来说,有很多种语言,如Java / Python 等等。对于AOP 来说,它有一种特定的实现语言,即AOL(Aspect-Oriented Language)。

对于AOL 来说,它可以和系统使用的语言保持一致。比如说系统实现的语言为Java,那么AOL 也可以使用Java。但是并不要求AOL 一定与系统使用的语言相同,比如说在Java 中我们常用的AspectJ。另外,通过其他语言派生出来的AOL 还有:

  • AspectC
  • AspectC++
  • AspectPHP
  • ...

总结

通过这篇文章我们需要知道,AOP 其实是一种理念,我们通过AOL 来实现,不同的系统中可以使用不同的AOL。